Jean-Christian Paul Denis<p>Moment de vie d'un homme invisible.</p>2024-03-18T01:38:35+01:00Jean-Christian Denisurn:md5:b7c6a660dff5a4abb67f3324fb2cd711DotclearMa domotique I : Historiqueurn:md5:58b7ac56cee715e2c87ae30481c79c8b2024-02-10T09:02:00+01:002024-02-10T14:45:53+01:00Jean-Christian DenisNRDomV2hassjeedommqttproxmoxraspberryrfxcomrhasspyubiquitizigbeezwave<p>Voilà plusieurs années que je m'amuse à concevoir ma propre domotique. Il serait tant que je vous conte mes aventures.</p> <p>Je ne sais même plus quand et comment tout ça a commencé, tout ce dont je me rappelle est que j'ai débuté tout petit et sans rien connaitre du monde de la domotique. Des heures de lecture à enchainer des termes dont j'avais du mal à appréhender la signification et à ne pas savoir par quel bout y prendre…<br>
<br>
Comme beaucoup, au début je ne souhaitais pas investir gros, ne sachant pas si ça allait le faire, et donc coté matériel, comme beaucoup je me suis rabattu sur l'excellent Raspberry Pi. Si je ne me trompe, à l'époque on en était au Raspberry Pi 2 voir début du Pi 3. Pour ce qui est du logiciel qui gérerait tout ça, il fallait commencer par quelque chose de simple ou il n'y aurait pas de code à écrire, je me suis donc rabattu sur Jeedom, qui avait l'avantage de tout intégrer, gestion de protocole, interface, etc. Le décor était planté, le cœur de ma domotique était là.<br>
Pour les périphériques, c'était assez compliqué à l'époque pour les particuliers, beaucoup de bidouilles pour interagir avec des protocoles peu respectés, des programmes bogués, du matériel peu disponible. Bref cela ma couté de nombreuses heures de recherches, de bricolages et de prises de tête, mais ça a également eu l'avantage de me faire connaitre plus en profondeur ce que j'allais utiliser.<br>
Les premiers protocoles à être intégré chez moi ont été le Zwave et le RFXCom. Le Zwave était plus aboutie (mais plus cher), et rfxcom était simple, le choix parfait pour des capteurs de sonde de température par exemple. C'est également à ce moment que j'ai commencé à intégrer du multimédia dans ma domotique avec des serveurs media comme LMS (Logitech Media Serveur) et de la reconnaissance vocale avec Rhasspy. Alexa, Siri et compagnie n'étaient pas encore sur le devant de la scène et je voulais que ma domotique soit opérationnel même sans internet. Ce dernier choix étant un des plus important à mes yeux. Cela a éliminé pas mal de matériels qui avaient "besoin" de serveurs sur le net pour fonctionner (ou pour pomper vos données).<br>
<br>
<img src="https://chez.jcdenis.fr/public/photos/.20240210-002_m.jpg" alt="" class="media-center"><br>
Puis les limites du Raspberry se sont vite fait sentir, pas assez de puissance, pas assez de ports, pas assez de possibilités d'évolution. J'ai donc fait un gros saut coté matériel en construisant mon premier rack domotique. Le réseau informatique de la maison évoluant également, le passage à un rack n'était pas un choix mais une obligation. J'ai écoulé pas mal de matériels assez vite car à chaque fois, en voulant faire des économies je me retrouvais coincé par certaines limites. J'ai fini par baser mon réseau informatique sur la marque Ubiquiti, console, switch, wifi. Ensuite j'avais un Nas Synology en version desktop un peu vieillissant, j'en ai profité pour passer à une version d'entrée de gamme en rack. Enfin j'ai construit un serveur sous Proxmox avec une carte mère mini-ITX, un processeur avec pleins de cœurs et une carte réseau 2x10G, le tout dans une baie 1U seulement. J'en reparlerais plus en détail dans un futur billet. L'important ici est que le cœur de ma domotique est un serveur sous Proxmox hébergeant une multitude de machines virtuelles dédiées à chaque sous partie de ma domotique. J'ai également abandonné des programmes comme Jeedom ou Home Assistant pour faire moi même le cerveau de ma domotique en utilisant Node-red. Quand aux protocoles, aujourd'hui je peux utiliser MQTT, Zwave, Bluetooth, Wifi, Zigbee, RfxCom, TIC,.. A l'heure actuelle, ma domotique gère entièrement le chauffage, le cumulus, les volets, les lumières, la consommation jour/nuit (HP/HC), certains agenda et rappels, le tout pilotable en automatique, à la voix ou depuis une interface web. Telle est la situation actuelle.<br>
Chacun fait comme il veut mais un serveur avec des machines virtuelles, c'est le pied ! Hormis le fait d'apprendre à bricoler, un Raspberry ou tout autre mini machine dans ce style n'est que perte d'argent car très vite limité. Et un serveur de VM ne servira pas qu'à la domotique, personnellement il fait tournée pleins d'autres choses comme un proxy, des serveurs web, un windows, etc...<br>
<br>
L'avenir risque de bien changer avec la démocratisation de la domotique en générale et les avancés technologiques comme le protocole <strong>Matter</strong> et l'<strong>IA</strong> pour tous. Encore des heures de bricolages en perspective !<br>
<br>
Dans l'optique de penses bêtes qui seront de toute façon obsolètes le jour ou j'en aurais de nouveau besoin, je vais quand même essayer d'exposer à travers quelques billets comment est conçu et comment fonctionne ma domotique.</p>https://chez.jcdenis.fr/post/2024/02/10/Ma-domotique-I-%3A-Historique#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/4561 anurn:md5:fa1c292c7f10651b0557e21b1ec1d7bd2023-11-10T19:50:00+01:002023-11-10T20:11:20+01:00Jean-Christian DenisDotcleardotclearrelease<p>Cela fait maintenant un peu plus d'un an que je participe au développement de la branche principale de Dotclear.</p> <p>Après avoir passé une année dans mon coin à faire une version débridé, mais non compatible de Dotclear, après avoir passé du temps à comprendre comment faire l'un dans l'autre, après avoir regardé le chef bosser, il y a un an c'était à mon tour d'apporter ma pierre à l'édifice.</p>
<ul>
<li>1 an que je casse du code,</li>
<li>1 an que j'oblige le chef à repasser derrière moi,</li>
<li>1 an que vous souffrez à mettre à jour vos installations,<br /></li>
</ul>
<p>Mais<br /></p>
<ul>
<li>1 an que j'apprend énormément,</li>
<li>1 an que je propose d'autres choses,</li>
<li>1 an que je m'amuse,<br /></li>
</ul>
<p>Et je tenais, même si je l'ai déjà fait par le passé, à remercier le <q>footer de merde</q> en chef pour me laisser autant de libertés !<br />
<br />
Bref, bien que je ne fasse plus de promesse, j'espère que ça va continuer, et c'est bien partie pour ! La version 2.28 de Dotclear va sortir dans quelques jours et j'ai déjà quelques bouts de code pour la suivante, comme par exemple une interface dédiée à la mise à jour, ce qui devrait un peu faciliter les choses en cas de gros changements. Encore que ces gros changements, ceux qui font mal, sont derrière nous.<br />
<a href="https://chez.jcdenis.fr/public/dotclear/2.29/dc_upgrade_home_en.png" title="dc_upgrade_home_en.png, nov. 2023"><img src="https://chez.jcdenis.fr/public/dotclear/2.29/.dc_upgrade_home_en_m.png" alt="dc_upgrade_home_en.png, nov. 2023" class="media-center" title="dc_upgrade_home_en.png, nov. 2023" /></a><br />
<a href="https://chez.jcdenis.fr/public/dotclear/2.29/dc_upgrade_attic_en.png" title="dc_upgrade_attic_en.png, nov. 2023"><img src="https://chez.jcdenis.fr/public/dotclear/2.29/.dc_upgrade_attic_en_m.png" alt="dc_upgrade_attic_en.png, nov. 2023" class="media-center" title="dc_upgrade_attic_en.png, nov. 2023" /></a><br />
<a href="https://chez.jcdenis.fr/public/dotclear/2.29/dc_upgrade_replay_en.png" title="dc_upgrade_replay_en.png, nov. 2023"><img src="https://chez.jcdenis.fr/public/dotclear/2.29/.dc_upgrade_replay_en_m.png" alt="dc_upgrade_replay_en.png, nov. 2023" class="media-center" title="dc_upgrade_replay_en.png, nov. 2023" /></a><br />
Puisse cette aventure continuer encore longtemps.</p>https://chez.jcdenis.fr/post/2023/11/10/1-an#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/452Upcrackurn:md5:532152a366f6887354abbe1cffd2fb0a2023-10-24T20:00:00+02:002023-10-24T19:17:37+02:00Jean-Christian DenisDomotiquedomotiquemàjvm<p>Comme chaque année avant le début de l'hiver, enfin de ce qui devrait l'être, je fais un petit tour de mon installation domotique.</p> <a href="https://chez.jcdenis.fr/public/photos/20230909-02.jpg" title="20230909-02.jpg, oct. 2023"><figure class="media-center"><img src="https://chez.jcdenis.fr/public/photos/.20230909-02_m.jpg" alt="20230909-02.jpg, oct. 2023" title="20230909-02.jpg, oct. 2023" /><figcaption>L'eau - Le ciel - 09/2023</figcaption></figure></a><p><br />
Ma domotique gérant le chauffage de la maison, les premiers froids me poussent chaque année à faire une vérification de l'ensemble de l'installation, histoire que madame ne me mette pas à l'amende en cas de panne impromptue. Comme chaque année cela se traduit par un changement de pile des capteurs en limite, une mise à jour des machines virtuelles et un contrôle visuel des chauffages et capteur de portes. Jusque là tout semble se dérouler parfaitement, je suis toujours agréablement surpris que mon installation et programmation perso de tout ça ronronne aussi bien. (Proxmox, Nodered, MQTT, c'est tellement génial.)<br />
Du coup j'ai voulu enchainer sur la mise à jour de mon PC Windows qui en réalité est une VM distante dont je me sers partout. Paf, le drame, mise à jour planté, même après 10 tentatives, même après nombre de lectures et tuto sur cette erreur connue. Il m'a fallu la moitié de l'après-midi pour trouver la parade, et donc pour une simple mise à jour, il a fallu que je change de processeur virtuel, que j'augment la taille du disque virtuel et que j'écrase la version courante par une installation... (Qui heureusement a gardé mes programmes fonctionnels.)<br />
<br />
Rendez-vous l'année prochaine pour une mise à jour.</p>https://chez.jcdenis.fr/post/2023/10/24/Upcrack#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/448Gurn:md5:d10fb56f5fd964b2b0afde1514fd5a292023-09-05T07:00:00+02:002023-09-05T06:40:48+02:00Jean-Christian DenisPortraitcousinadeoriane <p>Cousinade ce week-end, l'occasion de se retrouver avec de gens qu'on n'a pas vu depuis… pfiou, 30 ans !<br /></p><a href="https://chez.jcdenis.fr/public/photos/20230902-04-xl.jpg" title="20230902-04-xl.jpg, sept. 2023"><figure class="media-center"><img src="https://chez.jcdenis.fr/public/photos/.20230902-04-xl_m.jpg" alt="20230902-04-xl.jpg, sept. 2023" title="20230902-04-xl.jpg, sept. 2023" /><figcaption>Oriane - Vertrieu - 09/2023</figcaption></figure></a><p><br />
Occasion également de rencontres intergénérationnelles, comme ici avec presque 90 ans d'écart.</p>https://chez.jcdenis.fr/post/2023/09/05/G#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/434Jour Jurn:md5:498ad3f265aa926c90ef9717c7f5684d2023-09-04T07:38:00+02:002023-09-04T06:47:55+02:00Jean-Christian DenisBreforianerivière <p>C'est le jour J, on reprend le chemin de l'école, c'est par ou déjà ?<br /></p><a href="https://chez.jcdenis.fr/public/photos/20230902-02.jpg" title="20230902-02.jpg, sept. 2023"><figure class="media-center"><img src="https://chez.jcdenis.fr/public/photos/.20230902-02_m.jpg" alt="20230902-02.jpg, sept. 2023" title="20230902-02.jpg, sept. 2023" /><figcaption>Oriane - Vertrieu - 09/2023</figcaption></figure></a>https://chez.jcdenis.fr/post/2023/09/04/Jour-J#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/433Faiturn:md5:f75bb0e8a6c835b2e136031eb88f4e872023-08-19T14:14:00+02:002023-08-19T13:33:55+02:00Jean-Christian DenisBrefblogdotclearovh <p>Suite à mes problèmes avec OVH et son super support, qui m'a bien évidement répondu sans vraiment me lire et donc ne m'a absolument pas donné de solution, je migré ce blog que j'auto hébergeais chez moi vers un de mes serveurs dédiés <em>dans le could</em>.<br /></p><a href="https://chez.jcdenis.fr/public/photos/20230625-01.jpg" title="Le chat, août 2023"><figure class="media-center"><img src="https://chez.jcdenis.fr/public/photos/.20230625-01_m.jpg" alt="Le chat, août 2023" title="Le chat, août 2023" /><figcaption>Le chat - La veze - 08.2023</figcaption></figure></a><p><br />
Donc si tout s'est passé comme prévu, je vous souhaite le bienvenue chez moi. Encore.</p>https://chez.jcdenis.fr/post/2023/08/19/Fait#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/259Va falloir bougerurn:md5:e017fe80bdea8de707f701e551a489bc2023-08-15T14:09:00+02:002023-08-15T13:32:15+02:00Jean-Christian DenisBrefdomainelooseovhsupport <p>En bricolant mes hébergements il y a 2 semaines, la configuration DNS de tout ce que j'héberge chez moi à bogué. Comme je fais souvent n'importe quoi, je n'ai pas paniqué et j'y suis allé tête baissée. J'ai voulu modifier les zone DNS d'un nom de domaine et zou toute la configuration au petit ognon que j'avais faite pour jongler entre ipv4 et ipv6 a disparu du gestionnaire OVH. Une fois deux fois, rien ne passe, plus possible d'enregistrer un champs AAAA fixe couplé à un champs A dynhost. Chose que je fais depuis plusieurs années sans problème. Pour la petite histoire, j'ai besoin de cette configuration un peu spéciale car mon FAI me donne un IPv4 fluctuante, et une IPv6 quasi fixe. Comme à mon habitude, je me suis enfoncé dans les problèmes en décidant d'éditer toute ma Zone DNS en mode texte (à la main quoi), pan, même résultat sauf que ça m'a viré tous les couples AAAA fixe + A dynhost. Paf, cette fois j'ai tout perdu.<br />
<br />
Un truc que je ne fais jamais, je suis allé faire un ticket sur le support OVH, j'y ai droit, mais je sais que ça ne sert à rien. Moi: Explication du problème, Eux: réponse bateau <q>on veut en savoir plus</q>, Moi: explication pas à pas + screenshots, Eux: réponse <q>va voir la doc, je ferme le ticket</q>, Moi: Pleure! Même pas un petit mot pour répondre à la question <q>Je le fais depuis des années, ça ne marche plus, est-ce normal ?</q> Je vous laisse deviner que la doc en question m'explique comment faire un dynhost sur un champs A et que ça n'existe pas pour un champs AAAA. Merci la doc, mais je le savais déjà et ce n'est pas la question.<br />
<br />
Conclusion, je ne vais pas me battre avec OVH, clairement ils s'en branlent !<br />
<br />
Conclusion 2, va falloir que je déménage ce blog. Car pour l'instant j'enregistre A en fixe histoire de garder AAAA, mais si mon IPv4 change ça va pas se mettre à jour en 2 minutes…<br /></p>https://chez.jcdenis.fr/post/2023/08/15/Va-falloir-bouger#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/25720 ans !urn:md5:6ec27378f5522491c9a9db0f4a91578b2023-08-12T15:32:00+02:002023-08-13T09:24:40+02:00Jean-Christian DenisDotclear2.27dotclearrelease <p>Non ce n'est pas mon age, non ce n'est pas non plus ce qu'il me reste à tirer au boulot.</p>
<figure style="margin: 0 auto; display: table;"><img alt="dclogo96.png, juil. 2022" class="media" src="https://chez.jcdenis.fr/public/dclogo96.png" /></figure>
<p>Aujourd'hui 13 aout 2023, le moteur de blogs Dotclear que j'utilise <em>(peu)</em> et que je bricole <em>(beaucoup)</em> fête ses 20 ans d'existence, alors bon annif Dotclear et longue vie ! Et comme à l'accoutumé, c'est également le jour de sortie d'une <a href="https://fr.dotclear.org/blog/post/2023/08/13/Dotclear-2.27" hreflang="fr" title="Dotclear 2.27">nouvelle version</a> du moteur de blogs.</p>https://chez.jcdenis.fr/post/2023/08/12/20-ans-%21#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/258Upgrade postgresql 13 to 15urn:md5:178ef114b0f80c25634c7d475121eeb92023-07-29T10:00:00+02:002023-07-29T10:00:00+02:00Jean-Christian DenisDomotiquepostgresupdate<p>Suite à la mise à jour de Debian en version majeure (bookworm), je me fais un petit mémo express sur la mise à jour de Postgresql 13 vers 15.</p> <p>Je pars du principe que j'ai un utilisateur spécial pour postgres, on va l'appeler <code>pgu</code> et un seul cluster en version 13. Si on fait juste l'upgrade de postgres mais pas du système il faut installer les paquetages puis avec l'utilisateur postgres, on arrête le clusters nouvellement installé et vide, on upgrade l'ancien, on vérifie, on purge. :<br /></p>
<pre><code class="language-bash">apt update
apt install postgresql-15 postgresql-client-15
sudo -u pgu pg_dropcluster 15 main --stop
sudo -u pgu pg_upgradecluster 13 main
sudo -u pgu pg_lsclusters
apt purge postgresql-13 postgresql-client-13</code></pre>
<p>PS: Je suis un fou, je n'ai pas fait de sauvegarde avant, pour cela il suffit de faire</p>
<pre><code class="language-bash">sudo -u pgu pg_dumpall -F t > ~/backup_postgres_all_dbs.tar</code></pre>
<p>Voila voila.</p>https://chez.jcdenis.fr/post/2023/07/28/Upgrade-postgresql-13-to-15#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/256v8urn:md5:b11ff92909fd04124cc43bc5055378d92023-07-28T20:25:00+02:002023-07-28T19:31:28+02:00Jean-Christian DenisDomotiqueproxmoxupdate <p>J'adore Promox, plus je l'utilise plus j'en suis satisfait. Tout fonctionne comme prévu, et aujourd'hui je suis passé de Promox 7.4 à 8.0 sans aucun soucis.</p>
<figure style="margin: 0 auto; display: table;"><a class="media-link" href="https://chez.jcdenis.fr/public/divers/pve8.png" title="Mon serveur Proxmox v8"><img alt="Proxmox, juil. 2023" class="media" src="https://chez.jcdenis.fr/public/divers/.pve8_m.png" /></a>
<figcaption>Mon serveur Proxmox v8</figcaption>
</figure>
<p>Du bonheur !</p>https://chez.jcdenis.fr/post/2023/07/28/v8#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/443 semainesurn:md5:5ed4a2cb79e7389c0375bacbd01184cf2023-07-27T22:58:00+02:002023-07-27T22:02:41+02:00Jean-Christian DenisBrefambrecongésoriane <ul>
<li>3 semaines et c'est les congés,</li>
<li>3 semaines et on repart dans le code de Dotclear</li>
<li>3 semaines et je fais des travaux dans la maison</li>
<li>3 se... non, on va faire comme d'hab, tout et rien ! </li>
</ul>
<figure style="margin: 0 auto; display: table;"><a class="media-link" href="https://chez.jcdenis.fr/public/photos/20230625-02.jpg" title="Ambre et Oriane - Saint Germain - 06/2023"><img alt="20230625-02.jpg, juil. 2023" class="media" src="https://chez.jcdenis.fr/public/photos/.20230625-02_m.jpg" /></a>
<figcaption>Ambre et Oriane - Saint Germain - 06/2023</figcaption>
</figure>
<p>En tout cas 3 semaines et on va profiter tous ensembles !</p>https://chez.jcdenis.fr/post/2023/07/27/3-semaines#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/42Le bon, la brute et le devurn:md5:ee55706f2b2ac0295b893635fe5878cf2023-06-16T22:35:00+02:002023-06-16T21:52:53+02:00Jean-Christian DenisNaturecoredevdotclear<p>Ces derniers temps je me suis rendu compte que développer un module pour une application est bien diffèrent que de développer la dite application.</p> <p>Depuis des années j'écris, avec les pieds, des plugins pour Dotclear, je fouille le moteur de blog, trouvant les bouts de code dont j'ai besoin, je fais un petit brouillon qui, si il fonctionne, devient la version publiée de ce plugin. Ensuite j'y reviens pour corriger la tonne de bug et de cas que je n'avais pas prévu, j'y ajoute toutes sortes de petites portes me permettant d'ajuster telle ou telle fonction depuis l'interface, etc... Brouillon quoi.<br />
Sauf qu'aujourd'hui j'écris de plus en plus pour le moteur lui-même et la méthode est très différente. C'est difficile de ne pas partir dans tous les sens et de ne pas changer 50 trucs à la fois. Mais j'ai un bon professeur, un sage, un ancien (pardon) qui même si il ne le sait pas ou ne s'en rend pas compte, me montre le chemin, m'entrouve des barrières tout en me canalisant, laisse mes idées s'exprimer tout en lançant des avertissements si je m'égare. Ou si il s'en rend compte, le fait très bien !</p>
<figure style="margin: 0 auto; display: table;"><a class="media-link" href="https://chez.jcdenis.fr/public/photos/20230506-03.jpg" title="Insecte - La panicière - 05/2023"><img alt="20230506-03.jpg, juin 2023" class="media" src="https://chez.jcdenis.fr/public/photos/.20230506-03_m.jpg" /></a>
<figcaption>Insecte - La panicière - 05/2023</figcaption>
</figure>
<p>Bref, je souhaite le remercier pour tout ce temps qu'il perd à me lire, relire et corriger !</p>https://chez.jcdenis.fr/post/2023/06/16/Le-bon%2C-la-brute-et-le-dev#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/58Hey coucouurn:md5:35f8a609456e2fd5709c0b13e8d4b6122023-06-13T21:09:00+02:002023-06-13T20:11:19+02:00Jean-Christian DenisBrefambreoriane <figure style="margin: 0 auto; display: table;"><a class="media-link" href="https://chez.jcdenis.fr/public/photos/20230521-01.jpg" title="Ambre &amp; Oriane - La Panicière - 06/2023"><img alt="20230521-01.jpg, juin 2023" class="media" src="https://chez.jcdenis.fr/public/photos/.20230521-01_m.jpg" /></a>
<figcaption>Ambre & Oriane - La Panicière - 06/2023</figcaption>
</figure>
<p>Oh, des fleurs ! Ou des pucerons :o </p>https://chez.jcdenis.fr/post/2023/06/13/Hey-coucou#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/60Ca y esturn:md5:9d9f739b7f21ff10e5d99dd8252317f32023-05-23T21:42:00+02:002023-05-23T20:56:26+02:00Jean-Christian DenisBref <p>C'est rare mais ça y est je sature, 30 fois j'ai insisté, 30 fois ça ma gonflé. Je me sens pieds et poings liés à ne pouvoir rien faire, à ne pouvoir comprendre pourquoi refaire le monde. Et peut-être aussi ne pas avoir envie de le refaire, je suis trop lent pour ça. Et du coup je ne peux avancer.<br /></p><a href="https://chez.jcdenis.fr/public/photos/20230521-02.jpg" title="20230521-02.jpg, mai 2023"><figure style="display:table; margin:0 auto;"><img src="https://chez.jcdenis.fr/public/photos/.20230521-02_m.jpg" alt="20230521-02.jpg, mai 2023" title="20230521-02.jpg, mai 2023" /><figcaption>Mini - La Panicière - 05/2023</figcaption></figure></a><p><br />
Il est tant d'aller se promener <em>avec mini</em> <sup></sup><br />
A+</p>https://chez.jcdenis.fr/post/2023/05/23/Ca-y-est#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/57Le chef a diturn:md5:3212c275e4c392f7d0919277dce626412023-05-18T21:23:00+02:002023-05-18T20:32:38+02:00Jean-Christian DenisBrefatoum <p>Toujours à propos de Dotclear, le chef à dit <q>On ne met rien dans src sans test unitaire</q>. Hein quoi ? Nooonn, je le sentais pas trop. Ben je le sentais bien le pas trop. (Tu me suis ?)<br /></p><a href="https://chez.jcdenis.fr/public/photos/20230430-02.jpg" title="20230430-02.jpg, mai 2023"><figure style="display:table; margin:0 auto;"><img src="https://chez.jcdenis.fr/public/photos/.20230430-02_m.jpg" alt="20230430-02.jpg, mai 2023" title="20230430-02.jpg, mai 2023" /><figcaption>Evan - La panicière - 04/2023</figcaption></figure></a><p><br />
J'ai passé une bonne partie de la journée à découvrir ce monde. Quoi que j'ai déjà passer la moitié de cette bonne partie de la journée à essayer de faire fonctionner le schmilblick qui fait tourner ces tests. Et oh miracle j'ai sortie mon premier essai de test unitaire ce soir. Joie ? Bof, j'ai pas encore bien bien digéré le truc, et je sens que ça va me prendre des plombes cette affaire.<br />
Mais comme dirait l'autre, c'est pour la bonne cause. Car contrairement à ce que laisse penser mon billet, je suis convaincu de l'utilité de ces tests.</p>https://chez.jcdenis.fr/post/2023/05/18/Le-chef-a-dit#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/55Cacahuèteurn:md5:1f93d7f5de1d4d575da49d2e08ab120f2023-05-17T22:24:00+02:002023-05-17T21:34:11+02:00Jean-Christian DenisBrefambredotclear <p>Et voila, à peine <a href="https://fr.dotclear.org/blog/post/2023/05/13/Dotclear-2.26" hreflang="fr" title="Dotclear 2.26">la dernière version de Dotclear</a> sortie que je replonge dans l'hypothétique code de la futur version. Et comme à mon habitude, au lieu de tester simplement une idée, je la transmet à tout le code, ne sachant même pas si elle est viable ou non, intéressante ou pas.<br /></p><a href="https://chez.jcdenis.fr/public/photos/20230410-11.jpg" title="20230410-11.jpg, mai 2023"><figure style="display:table; margin:0 auto;"><img src="https://chez.jcdenis.fr/public/photos/.20230410-11_m.jpg" alt="20230410-11.jpg, mai 2023" title="20230410-11.jpg, mai 2023" /><figcaption>Ambre - La Panicière - 04/2022</figcaption></figure></a><p><br />
Bref, je pars en cacahuète !<br />
<br />
<em>PS: Je suis content de la tournure que prend le code de Dotclear, ce serait dommage que je gâche tout ça</em> :p</p>https://chez.jcdenis.fr/post/2023/05/17/Cacahu%C3%A8te#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/54Intégrer des fonctions de désinstallationurn:md5:58467a6fe3c9843d7f7fc4d6f9d393112023-04-16T20:28:00+02:002023-04-23T22:41:16+02:00Jean-Christian DenisPluginsintégrationpluginuninstall<p>Avant l'arrivé de Dotclear 2.26 prévu pour ce mois de mai 2023, j'ai repris une partie de codes d'un de mes plugins pour en faire un plus simple qui fourni des fonctions de désinstallation aux autres modules.</p> <p>A l'heure ou j'écris ces lignes le plugin Uninstaller n'est disponible que sur <a href="https://github.com/JcDenis/Uninstaller" hreflang="en" title="Dotclear plugin Uninstaller - github">mon github</a> et uniquement à partir de Dotclear 2.26-dev et PHP 8.1+. Il va permettre lorsque l'on veut supprimer un module (plugin ou thème) de le faire de manière plus complète, on va pouvoir lors de sa suppression également supprimer ses traces comme par exemples ses paramètres, ses éventuelles tables, des fichiers Var, ses Logs, etc... Tout cela de manière simplissime.<br />
Je vous explique comment intégrer cela à vos plugins et thèmes si ils en ont besoin.<br />
<br />
Prenons l'exemple du plugin <strong>Scronch</strong> qui sera écrit pour les dernières évolutions de Dotclear 2.26, c'est à dire qu'il utilisera l'arborescence en espace de nom, ou encore dit autrement qu'il aura un dossier <strong>src</strong> et que ces fichiers PHP commenceront par <strong>namespace Dotclear\Plugin\Scronch;</strong>. Ce plugin utilise plusieurs paramètres regroupés dans un espace de nom de paramètres portant son nom. (càd: <strong>dcCore::app()->blog->settings->Scronch</strong> ) Notre plugin va également enregistrer des logs dans la base de Dotclear, ils seront également regroupés sous son nom.<br />
<br />
Le décor est posé. Pour ajouter des fonctions de désinstallation il faut ajouter dans le dossier <strong>src</strong> un fichier du nom de <strong>Uninstall.php</strong> qui intègrera donc la classe <strong>Uninstall</strong>, cette class devra étendre la classe <strong>dcNsProcess</strong> qui est très utilisée maintenant dans Dotclear. Comme partout la première méthode <strong>init()</strong> de cette classe va permettre de faire des testes afin de savoir si on peut l'utiliser par la suite. Puis la seconde méthode <strong>process()</strong> va permettre d'enregistrer les actions de désinstallation à mener. <em>(Elle va également permettre de traiter d'éventuelles actions non standards, j'en reparlerais dans un deuxième exemple)</em>. Quand à la troisième méthode <strong>render()</strong> elle ne servira que si on a besoin d'ajouter un champs de formulaire. <em>(idem on verra ça en deuxième exemple.)</em>. Donc si vous suivez, il va falloir dire dans la méthode <strong>process()</strong> que nous voulons supprimer les logs et les paramètres. Suivons le premier exemple du fichier complet de désinstallation de notre plugin <strong>Scronch</strong> :</p>
<pre><code class="language-php"><?php
declare(strict_types=1);
namespace Dotclear\Plugin\Scronch;
use dcCore;
use dcNsProcess;
use Dotclear\Plugin\Uninstaller\Uninstaller;
class Uninstall extends dcNsProcess
{
public static function init(): bool
{
static::$init = defined('DC_CONTEXT_ADMIN');
return static::$init;
}
public static function process(): bool
{
if (!static::$init || !dcCore::app()->plugins->moduleExists('Uninstaller')) {
return false;
}
Uninstaller::instance()
->addUserAction(
'settings',
'delete_all',
'Scronch'
)
->addUserAction(
'logs',
'delete_all',
'Scronch'
)
->addUserAction(
'plugins',
'delete',
'Scronch'
)
->addUserAction(
'versions',
'delete',
'Scronch'
)
->addDirectAction(
'settings',
'delete_all',
'Scronch'
)
->addDirectAction(
'logs';
'delete_all',
'Scronch'
)
->addDirectAction(
'plugins',
'delete',
'Scronch'
)
->addDirectAction(
'versions',
'delete',
'Scronch'
)
;
// no custom action
return false;
}
}</code></pre>
<p>Que voit-on ici ? On va d'abord chercher le désinstalleur avec <strong>Uninstaller::instance()</strong> Puis on ajoute 4 actions qui sont <strong>effacer les paramètres</strong>, <strong>effacer les logs</strong>, <strong>effacer le plugin</strong>, <strong>effacer la version</strong>. Mais alors pourquoi y sont-ils deux fois ? Car il y a deux manières de supprimer un module, soit directement (<strong>Direct</strong>) avec un clic sur supprimer dans la liste des plugins ou thèmes et là les actions seront menées sans aucune question ! Soit en faisant appelle à l'utilisateur (<strong>User</strong>) avec une liste de choix comme dans l'exemple suivant :</p>
<figure style="text-align: center;"><a href="https://chez.jcdenis.fr/public/dotclear/plugins/sshot-uninstaller-01.jpg" title="sshot-uninstaller-01.jpg, avr. 2023"><img src="https://chez.jcdenis.fr/public/dotclear/plugins/.sshot-uninstaller-01_m.jpg" alt="sshot-uninstaller-01.jpg, avr. 2023" title="sshot-uninstaller-01.jpg, avr. 2023" /><figcaption>Capture écran - Uninstaller prompt</figcaption></a></figure>
<p>Je laisse seul juge le développeur si il souhaite ou non proposer les actions directes, on m'a déjà fait remarquer que nombre de gens préfère garder ces traces au cas ou il faille réinstaller le module plus tard, on pour sauvegarde... Si toutefois vous souhaitez désactiver les actions directes sur votre plateforme de blogs, il suffit de se rendre dans <strong>about:config</strong> et de mettre à <strong>oui</strong> l'entrée <strong>system => no_direct_uninstall</strong>.<br /><br />Voici à l'instant T toutes les actions prédéfinies suivi de l'ID du nettoyeur et de son action :</p>
<ul><li>effacer le dossier de cache sélectionné : caches - delete</li>
<li>vider le dossier de cache sélectionné : caches - empty</li>
<li>effacer la table de logs sélectionnée : logs - delete_all</li>
<li>supprimer le numéro de version sélectionné : versions - delete</li>
<li>supprimer le dossier VAR sélectionné : vars - delete</li>
<li>supprimer les fichiers et dossiers du thème sélectionné : themes - delete</li>
<li>supprimer les fichiers et dossiers du plugin sélectionné : plugins - delete</li>
<li>supprimer la table de base de données sélectionnée : tables - delete</li>
<li>vider la table de base de données sélectionnée : tables - empty</li>
<li>supprimer les paramètres globaux sélectionnés : settings - delete_global</li>
<li>supprimer les paramètres locaux (blog) sélectionnés : settings - delete_local</li>
<li>supprimer tous les paramètres sélectionnés : settings: -dellete_all</li>
<li>supprimer les paramètres relatifs (cf code) : settings - delete_related</li>
<li>supprimer les préférences globales sélectionnées : preferences - delete_global</li>
<li>supprimer les préférences locales (utilisateurs) sélectionnées : preferences - delete_local</li>
<li>supprimer toutes les préférences sélectionnées : preferences - dellete_all</li>
<li>supprimer les préférences relatives (cf code) : preferences - delete_related</li>
</ul>
<div>Si cela ne suffit pas, il y a toujours des cas spéciaux, en plus de pouvoir écrire et ajouter son propre <em>Nettoyeur</em>, il est prévue de pouvoir utiliser un formulaire personnalisé qui s'ajoutera à la liste de la capture d'écran ci-dessus. Pour cela il suffit de modifier les méthode <strong>process()</strong> et <strong>render()</strong> comme suit :</div>
<pre><code class="language-php"><?php
declare(strict_types=1);
namespace Dotclear\Plugin\Scronch;
use dcCore;
use dcNsProcess;
use Dotclear\Plugin\Uninstaller\Uninstaller;
class Uninstall extends dcNsProcess
{
public static function init(): bool
{
static::$init = defined('DC_CONTEXT_ADMIN');
return static::$init;
}
public static function process(): bool
{
if (!static::$init || !dcCore::app()->plugins->moduleExists('Uninstaller')) {
return false;
}
if (!empty($_POST['mon_action_perso']) {
// Ici on exécute la tache de supprimer la choucroute
}
// on retourne true pour indiquer qu'on a un formulaire
return true;
}
public static function render(): void
{
if (!static::$init) {
return;
}
return (new Para())->items([
(new Checkbox('mon_action_perso', true))->value(1),
(new Label('supprimer la choucroute', Label::OUTSIDE_LABEL_AFTER))->for('mon_action_perso')->class('classic'),
]);
}
}</code></pre>
<p>J'ai supprimé le code des actions prédéfinies dans l'exemple pour le rendre plus clair mais bien entendu on peut les mixer.</p>
<p><span style="font-family: var(--sans-serif); font-size: var(--body-font-size);">Voila, pour l'instant ce plugin est tout jeune et va surement évoluer, mais ces quelques lignes permettent un première approche de ce qui pourra être proposé à tous.</span></p>https://chez.jcdenis.fr/post/2023/04/16/Int%C3%A9grer-des-fonctions-de-d%C3%A9sinstallation#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/59Pas le tempsurn:md5:e33526a774bdf608c3fd5c2bcb20524d2023-03-12T11:23:00+01:002023-03-12T11:32:22+01:00Jean-Christian DenisLife is Goodloosetemps<p>Je ne sais pas si je suis mal organisé, si je suis lent, ou tout simplement si j'aime ça. Toujours est-il que je n'ai le temps de rien.</p> <p>Pas le temps d'écrire sur ce blog, pas le temps de me balader avec les mioches, pas le temps de faire du rangement, pas le temps de voir mes amis, pas le temps d'apprendre de nouveaux trucs, pas le temps de faire de la photo... La liste pourrait s'étendre quasi à l'infini.<br /></p><a href="https://chez.jcdenis.fr/public/photos/20230305-01.jpg" title="20230305-01.jpg, mars 2023"><figure style="display:table; margin:0 auto;"><img src="https://chez.jcdenis.fr/public/photos/.20230305-01_m.jpg" alt="20230305-01.jpg, mars 2023" title="20230305-01.jpg, mars 2023" /><figcaption>Le chat - La veze - 03/2023</figcaption></figure></a><p><br />
Exemple avec monsieur chat, sujet de la première photo de 2023 ! On est en mars et je n'ai pas fait une seule photo en ce début d'année, la loose.</p>https://chez.jcdenis.fr/post/2023/03/12/Pas-le-temps#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/53En boucleurn:md5:f354aeb9dc287847ae35fca7191c71c82023-01-16T22:47:00+01:002023-01-16T22:53:54+01:00Jean-Christian DenisBreflannasrouteurvm <p>Bon, ça y est, je crois que je viens de me calmer sur le bricolage de mon réseau maison. Après un excès de folie vendredi soir à vouloir passer tous mes liens de 10Gb vers 2x10Gbs entre routeur, LAN, VM, NAS, etc... J'ai mis 3 jours à revenir en arrière. Ouais, ça calme. Surtout pour un exercice de style qui ne sert absolument à rien à part épater la galerie. Même pas. Aux vues de mes stats IPv6, je n'ai pas manqué à grand monde !<br />
Bref, c'est bon je vais pouvoir retourner à mon bricolage de Dotclear.</p>https://chez.jcdenis.fr/post/2023/01/16/En-boucle#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/52Upgradeurn:md5:f565bd637584d59b2011f2ef109326432022-12-25T20:57:00+00:002022-12-25T21:07:13+00:00Jean-Christian DenisBref2.24màj <p>Après la mise en conformité de mes plugins, c'est au tour de mon blog de se mettre à jour dans la <a href="https://fr.dotclear.org/blog/post/2022/12/24/Dotclear-2.24" hreflang="fr" title="Dotclear 2.24">dernière version de Dotclear</a> ! Un peu différente des autres car cette fois il y a eu des changements plus profonds dans le code, enfin surtout ils cassaient la compatibilité d'une version à la l'autre. Du coup il a fallu passer par un mode qui n'a pas dû servir à grand monde: le mode de secours. Tout ça pour dire qu'au lieu de 30 secondes pour tout mettre à jour, ça m'a pris 1 minute. Le temps de me louper deux fois dans mon mot de passe…<br />
<br />
PS: J'hésite à faire un billet par plugin que je maintient à l'instant T, donc si il y a du bruit ici c'est normal, mais me connaissant <a href="https://chez.jcdenis.fr/pages/Dotclear-Plugins" hreflang="fr" title="Plugins Dotclear">la page dédié</a>, aidé de ma flemme légendaire, me suffira.</p>https://chez.jcdenis.fr/post/2022/12/25/Upgrade#comment-formhttps://chez.jcdenis.fr/feed/atom/comments/49