Ideenquelle

Ideenquelle ou la Source des idées en Français.

Il s’agit juste d’un lieu de partage et de réflexion écrit/géré, au départ, par Groink2369.
Il est ouvert à d’éventuelles collaborations à d’autres penseurs sous conditions d’être au moins plusieurs dans sa tête.

Le nom du blog vient de l’allemand et signifie Source des idées. Il s’agit également d’un jeu de mot Quelle idée.

LED clignotante

J’ai parcouru différents tutoriaux pour débutants pour l’Arduino (ou l’ESP32). Généralement, nous y retrouvons une explication théorique sur l’électricité (les électrons, le sens “naturel” et “conventionel”, la loi d’Ohm, … ) puis des montages simples : une LED, un bouton, …

Globalement, c’est assez similaire.

Toutefois, j’ai bien aimé celui de ESP32I/O où les exemples sont un peu plus nombreux. Il propose notament de faire clignoter une LED tout en faisant tourner le script pour d’autres fonctions (voir LED Blink without delay)

Le site reprend également l’exemple de la LED qui reste allumée tant que j’appuie Button toggle LED.

Quid si j’appuie sur le boutton et que la LED clignote jusqu’à ce que je ré-appuie sur le boutton ? Ci-dessous un petit exemple de programme qui le permettra :

#define LED_PIN     26 // ESP32 pin GPIO26 connected to LED
#define BUTTON_PIN  25 // ESP32 pin GPIO25 connected to button

#define BLINK_INTERVAL 1000  // interval at which to blink LED (milliseconds)

// Variables will change:
int ledState = LOW;   // ledState used to set the LED

int previousButtonState = LOW; // will store last time button was updated
int blinking = LOW; // store status of LED (must LED blink or not)

unsigned long previousMillis = 0;   // will store last time LED was updated

void setup() {
  Serial.begin(9600);

  // set the digital pin as output:
  pinMode(LED_PIN, OUTPUT);

  // set the digital pin as an input:
  pinMode(BUTTON_PIN, INPUT_PULLUP);
}

void loop() {
  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  unsigned long currentMillis = millis();

  // check button state's change
  int currentButtonState = digitalRead(BUTTON_PIN);

    if (currentMillis - previousMillis >= BLINK_INTERVAL && blinking == HIGH) {
        // if the LED is off turn it on and vice-versa:
        ledState = (ledState == LOW) ? HIGH : LOW;

        // set the LED with the ledState of the variable:
        digitalWrite(LED_PIN, ledState);

        // save the last time you blinked the LED
        previousMillis = currentMillis;
    } else if (currentMillis - previousMillis >= BLINK_INTERVAL && blinking == LOW){

        // if the LED is off turn it on and vice-versa:
        ledState = LOW;

        // set the LED with the ledState of the variable:
        digitalWrite(LED_PIN, ledState);

        // save the last time you blinked the LED
        previousMillis = currentMillis;
    }

    if (currentButtonState != previousButtonState ) {
        // print out the state of the button:
        Serial.println(currentButtonState);
        // save the last state of button
        previousButtonState = currentButtonState;
        if (previousButtonState == HIGH){
            blinking = (blinking == LOW) ? HIGH : LOW;
        }
        Serial.println(blinking);
    }
    // DO OTHER WORKS HERE
}

20260912

Encore quelques modifications sur le blog :

Je pense que ma folie s’exprime assez bien ici. J’ai un certain plaisir à me dire que cet endroit est tordu.

e-Paper Waveshare Pico

Premier projet : faire tourner un e-paper. Pourquoi ? Parce que cela a l’air. C’est assez bête; je l’avoue.

Ni une, ni deux, j’achète le modèle suivant : Pico e-Paper 2.66B. Il arrive assez vite. Toutefois, je le laisse de côté car d’autres activités m’occupent.

Le temps passe et quelques semaines mois après, je m’y intéresse enfin. Quel malheur ! C’est une version Pico (et non une version simple). Pas de chance car je n’ai pas de Pico. Est-ce qu’il fonctionne ? Après moultes hésitations, je décide de le connecter en suivant le tableau de connexion repris sur le wiki.

Ouf ! il fonctionne bien. Pour que ce soit plus pratique, je prends un Pico (heureusement pas trop cher) chez mon dealer du coin McHobby.

Le e-Paper possède bien une librairie Python. Sauf que … c’est assez limité car elle fait recours à FrameBuffer. Donc impossibilité de jouer sur la fonte.

Peter Hinch a développé la librairie MicroPython font_to_py. Cela permet de convertir une fonte à une taille fixée sur le Pico en transformant un ensemble de caractères en code source Python. Coen Tempelaars a réutilisé cela pour écrire de manière centrée via la class CenterWriter.

Avec cela, je peux écrire dans une taille plus grande que celle permise par FrameBuffer. Sauf que j’aimerai également changer le sens d’écriture. La connectique du e-Paper fait que le cable d’alimentation USB sort par le haut. J’aurai aimé qu’il sorte sur le côte (rotation à 90° ou 270°). Et si ce n’est pas possible, qu’il sorte vers le bas. C’est possible (en s’inspirant du code fourni pour d’autres e-Paper de la même marque et du repo).

Je dois encore explorer certains repos.

La problématique suivante est l’utilisation de la couleur. Pour ce que j’ai vu, soit c’est noir&blanc soit multicouleurs. Pas de tricolor.

Bref, il y a encore de l’exploration à faire.

I Have Adhd

J’aime bien cette idée de simplifier la réponse d’un LLM.

The rules

  1. Lead with the next action.
  2. Number multi-step tasks.
  3. End with one concrete next step.
  4. Suppress tangents.
  5. Restate state every turn.
  6. Specific time estimates (minutes, not “a bit”).
  7. Make wins visible.
  8. Matter-of-fact errors.
  9. Cap lists to 5 items.
  10. No preamble. No recap. No closers.

Je me dis que cela devrait être de base ainsi.
Trop de personnes ne comprennent pas la prochaine étape.

La Grange

J’adore la musicalité des articles. J’aimerai développer cette manière d’écrire. Et en plus de cela, c’est une porte vers une autre partie du monde

The Four Rules for a Good Walk

4 éléments pour une bonne promenade : un but utile, la sécurité, le confort et l’intérêt.

via Morgan

Serveur DLNA

Nous avons une vieille télévision : elle date de 2010. Elle est smart. Sauf que … Avec le temps, les applications smart ont disparu, faute de support des éditeurs de logiciels (RTBF, Arte, …).

Elle possède toute de même une fonctionnalité qui est native : DLNA. Il s’agit de lire des données (vidéo, audio, photo) sur le réseau. Pour cela, il faut un serveur qui émet les données. Chez nous, notre box Internet permet cela nativement pour les supports USB qu’on y insère. Pas pratique si on souhaite modifier régulièrement ce que l’on regarde.

Nous avons trouvé une application : Serviio. Pratique et facile, bref assez simple pour que Madame et moi l’utilisions essentiellement pour les enfants. Ce qui est moins cool, c’est que cela fonctionne sous Java. Lors du passage de Windows à Linux, j’ai cherché une alternative.

Elles existent :

Les tutoriels (parfois anciens) fonctionnent assez bien. Il y a pour l’un des deux un soucis dans les tutoriels par rapport aux droits d’accès. Rien à redire mise à part … à moins que ? Naturellement, il y a un “Mais”. Mais, pour une raison que j’ignore, la télévision n’affiche pas les dossiers ; tous les fichiers sont à la racine. ce qui rend impraticable le choix de la vidéo.

Bref, pas de choix: je réinstalle Serviio (sur Linux cette fois) et bim, bam, cela fonctionne. Il ne me reste plus qu’à vérifier s’il est possible d’ajouter des images pour illustrer les dossiers (plus facile pour que le dernier comprenne ce qu’il choisit).

Installation

  1. Installer les dépendances : Java, sous son package openjdk, ffmpeg et x264. Cela se fait simplement avec un apt install openjdk -*-jdk ffmpeg x264. Il faut vérifier la dernière version de openjdk (aujourd’hui, c’est le 25).
  2. Téléchargement et installation de Serviio : Sur le site de Serviio, il faut vérifier le numéro de la dernière version (aujourd’hui, c’est la 2.4). Pour le récupérer : wget http://download.serviio.org/releases/serviio-2.4-linux.tar.gz Pour le décompresser (ici, on le met dans /opt) : tar -xzvf serviio-2.4-linux.tar.gar -C /opt
  3. Permettre à Serviio d’être lancé au boot. Vu que nous avons juste décompressé l’application dans /opt, le système ne sait pas comment lancer au boot Serviio ni surveiller qu’il fonctionne en continu. Nous allons le renseigner en créant un service pour systemd. Pour commencer, nous allons écrire un fichier dans /lib/systemd/system/serviio.services :
[Unit]
Description=Serviio media Server
After=syslog.target network.target

[Service]
User=serviio
ExecStart=/opt/serviio-2.4/bin/serviio.sh
ExecStop=/opt/serviio-2.4/bin/serviio.sh -stop

[Install]
WantedBy=multi-user.target

Ici, nous lançons l’application avec l’utilisateur serviio. Il faut créer cet utilisateur avec useradd -r -U -s /bin/false serviio puis lui donner les accès au dossier serviio avec chown -R serviio:serviio /opt/serviio-2.4/.

  1. Rendre le service accessible avec systemctl enable serviio.service
  2. Vérifier le status avec systemctl status serviio.service. S’il n’est pas lancé, nous le lançons : systemctl start serviio.service.
  3. Configurer Serviio via sa console Web. Elle est accessible via http://IP_Machine:23423/console

Source:

Linuxconfig - How to install Serviio media server on Raspberry Pi

Pass phrases, alsacréations

J’ai (très) rapidement regardé le code; enfin, le dictionnaire. Il y a peu de variations. Cela se peuple rapidement. Il faut certainement faire un tri dans les mots.

Je me demande s’il est possible de greffer cela sur un gestionnaire de mots de passe.
Même si je doute de l’utilier de la greffe, car le mot de passe “facile” ne l’est que si on le retient.
Or le gestionnaire de mots de passe a tendance à réduire à néant l’effort de la mémorisation.

À voir.

Edit : 5 heures plus tard : je suis déjà tombé là-dessus. Je voulais écrire et m’en souvenir. Voilà, c’est fait.

Pensée du jour

Je trouve que Spotify n’arrive pas à comprendre mes goûts musicaux. Je jongle entre chanson française, néerlandaise et flammande, avec des petites touches allemandes et italiennes (mais petites). Il y a du classique, du rap, de la variété, de l’électro, de l’enfant, …

Et quand je teste les playlists proposés par Spotify, je tombe sur … du mainstream plutôt étasunien. J’aime bien écouter quelques morceaux qui défilent et défilent encore dans les radios modernes. Je me pose toutefois la question de cette imposition. Je trouve que c’est trop. Juste trop.

J’aimerai que l’application (Spotify ou autre) me fasse découvrir de la musique assez similaire mais légèrement différente, qu’elle pousse mes envies vers d’autres horizons. Je n’ai pas beaucoup/du tout cherché un remplaçant ou une possibilité pour découvrir.

Je trouve dommage aussi qu’il ne soit pas possible (aisément) de virer un artiste/chanson. Ce serait pratique pour éviter certains souhaits d’enfant. Le mode explicite peut déjà aider (même si les chansons restent visibles tout en étant inacessible).

Au final, je suis déçu de Spotify. Je vais plus que probablement repasser aux radios.

Accéder à un disque dur sans Samba depuis Windows

Je souhaitais accéder à un disque situé sur un serveur Debian depuis un PC sous Windows. Vu que je ne souhaite pas prévoir un accès dans le temps, j’ai écarté la solution Samba.

J’avais une solution entre deux ordinateurs sous Debian avec sshfs. J’aurais pu faire de même avec Windows. Mais … il y a toujours un mais (sinon je n’écrirai pas !) les limitations imposées par le sysadmin font que je ne peux pas installer les applications pour utiliser SSHFS Pour mémoire : il faut installer WinFsp et SSHFS-Win

Solution mise en place : WinSCP L’application est portable. Elle est plein de fonctionnalités (filter sur les fichiers, file d’attente, … ). Il est également possible de copier d’abord la structure des dossiers puis d’y copier les fichiers.

Monter un disque dur externe automatiquement

  1. Installer les paquets nécessaires
sudo apt update
sudo apt install exfatprogs
  1. Identifier le disque dur externe
lsblk

La commande va vous renseigner tous les devices et leur correspondance dans le système. Imaginons pour la suite que ce soit /dev/sdb1

  1. Créer le dossier où le disque dur sera accessible Généralement, cela se fait dans un dossier dans /mnt ou dans /mediaavec la commande mkdir (il faut probablement rajouter un petit sudo car de base, vous n’avez pas accès en écriture).
  2. Trouver le UUID de votre disque : sudo blkid /dev/sdb1 vous renvoie une sortie similaire à : /dev/sdb1/ : LABEL="TOSHIBA EXT" BLOCK_SIZE="512" UUID="62E69DEDE69DC1A9" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="1473b688-909f-4c28-a09f-07146df2ca87" Vous aurez besoin du UUID pour l’étape suivante.
  3. Préparer le montage automatique via /etc/fstab/ sudo nano /etc/ftsab Ajouter la ligne suivante (en adaptant au besoin les paramètres trouvés au point précédent : UUID=62E69DEDE69DC1A9 /mnt/mondisquedur ntfs defaults,rw,uid=1000,gid=1000,umask=0002 0 0
  4. Tester le processus avec sudo mount -a. Il se peut qu’il faille relancer systemctl avec sudo systemctl reload-daemon et puis tester le processus.

Source

Fournisseur aluminium

On m’a renseigné deux fournisseurs dans les alentours de Bruxelles pour de l’aluminium Aludan : Ils font plus que de la simple vente (découpe, assemblage, …). hobby alu : Ils font juste de la vente.

Pas trop loin, pas juste à côté. Il n’y a plus qu’à trouver un fournisseur d’acier, s’équiper et … s’y mettre.

Force DNS queries to specific servers - testing

J’ai l’impression qu’un de mes appareils n’utilisent pas le serveur DNS maison.
Il acquiert bien son IP via le DHCP; je ne vois rien au niveau du server DNS.
Bizarre, bizarre.

Si je mets la règle suivante sur mon switch, cela coupe toute la connexion. Pratique mais overkill.

/interface ethernet switch rule
add dst-mac-address=MAC_appareil/FF:FF:FF:FF:FF:FF new-dst-ports="" ports=port_X src-mac-address=MAC_switch/FF:FF:FF:FF:FF:FF switch=switch1
add dst-mac-address=MAC_switch/FF:FF:FF:FF:FF:FF new-dst-ports="" ports=port_X src-mac-address=MAC_appareil/FF:FF:FF:FF:FF:FF switch=switch1

Sur base de mes recherches précédentes, j’avas mis en place les deux règles suivantes :

/ip firewall nat
add action=dst-nat chain=dstnat disabled=yes dst-address=!192.168.1.2 dst-port=53 protocol=udp to-addresses=192.168.1.2
add action=dst-nat chain=dstnat disabled=yes dst-address=!192.168.1.2 dst-port=53 protocol=tcp to-addresses=192.168.1.2

Cela ne semble donc pas suffisant. Je teste donc les règles suivantes :

/ip firewall filter
add action=drop chain=forward comment="Block DoT - Force fallback to local DNS" dst-port=853 in-interface-list=LAN protocol=tcp
add action=drop chain=forward comment="Block DoT - Force fallback to local DNS" dst-port=853 in-interface-list=LAN protocol=udp
/ip firewall nat
add action=redirect chain=dstnat comment="Force Local DNS (TCP)" dst-address=!192.168.1.2 dst-port=53 protocol=tcp to-addresses=192.168.1.2 to-ports=53
add action=redirect chain=dstnat comment="Force Local DNS (UdP)" dst-address=!192.168.1.2 dst-port=53 protocol=udp to-addresses=192.168.1.2 to-ports=53

J’ai trouvé cela sur les Internets 1 2.
J’espère que cela va fonctionner et pas tout déglinguer.

Magasins de bois

Pas évident detrouver des magasins quand on ne les connait pas. Donc une petite liste sans prétention, accessible aux particuliers

Pensée du jour

Envie de rien, envie de tout. Mais surtout de rien.

Haie mitoyenne

Que mettre comment arbuste pour une haie mitoyenne qui :

La question des haies est revenue sur la table depuis quelques années au travers de grands plans pour en replanter. Il existe donc des guides établis pour la plupart des régions.

Personellement, j’ai gardé les espèces suivantes :

Reste à voir quelle coupe appliquée. L’idée est, a priori, d’avoir une haie mitoyenne. Et bon, je présume que mon voisin appréciera d’avoir une haie taillée (moi, pas forcément).

Il pourrait également être possible de planter des cassissiers ou des groseiers.

Éducation financière

L’éducation financière, c’est assez simple. Du moins, la base.

J’achète, je vends et je fais du profit (ou des pertes).
J’économise pour prévenir un besoin/une envie.
Je fais un emprunt (combien et selon quels critères); je paie des intérêts (pourquoi et combien) et du capital. Il y a un amortissement (et son tableau).

Je ne pense pas que cela se limite à ses trois phrases. C’est un début.
Il est possible d’aller plus loin avec la question de la bourse, de prêt spécifique, du calcul du TAEG. Toutefois, je pense que certaines notions ne sont pas nécessaires pour le premier quidam venu.

Comme première ressource, je pense à :

Nouveau filtre pour fail2ban

Beaucoup de scans et souvent sur des .env ou des phpinfo.
Pas encore de chances, je ne suis pas dans ce cas (enfin, j’espère).
Quoi qu’il en soit, j’ai mis un filtre sur cette base :

[Definition]

failregex = ^<HOST> - .* "\s*(?:GET|POST)\s+[^"]*(?:\.env|phpinfo\.php)[^"]*\s+HTTP/[^"]+"\s+(?:403|404)\b

ignoreregex =

Puis une prison dédiée :

[nginx-sensitive-files]

enabled  = true
filter   = nginx-sensitive-files
logpath  = /var/log/nginx/access.log
backend  = auto

maxretry = 5
findtime = 10
bantime  = 3600

action   = %(action_)s

Le findtime est reduit car, a priori, ce n’est pas le genre de page que l’on recherche passivement.

20260906

Le ciel se dissout.
Le terre se fissure.
Ma tête s’en va.
Mon corps est juste là.

Accès bloqué

Je viens de perdre une demi-journée.
Non, en fait, je viens de gagner de l’expérience après avoir perdu du temps et de l’énergie.

Je remets en contexte: j’ai lu les conseils de Karl.

Ni une ni deux ! Je me dis que c’est le moment d’au moins d’essayer, de voir si je peux y arriver.
Je me lance en créant un dossier et un utilisateur spécifique sur mon lieu de sauvegarde.
J’essaie de me connecter et rien ne se passe. Cela dure une plombe puis connection time out.
Depuis chez moi, cela fonctionne. Je règle la question des clés SSH.

Je recommence. Toujours le même soucis depuis le server distant.
Je m’aide d’une IA rapidement mais sans plus. J’ouvre même un ticket (que je ne retrouve plus).

Finalement, j’ai trouvé .

ufw bloque les accès “sortants”. J’avoue que j’ai manqué une étape. Soit.
Il suffit d’autoriser la sortie sur le port nécessaire et c’est résolu !