Cliquez sur un ou plusieurs tags pour appliquer un filtre sur la liste des notes de type "Journaux" :

[ << Notes plus récentes (651) ] [ Notes plus anciennes (400) >> ]

Jeudi 29 août 2024

Journal du jeudi 29 août 2024 à 13:23 #iteration, #projet

Voici les nouveautés depuis ma dernière itération du Projet 11 - "Première version d'un moteur web PKM".

Ce commit contient le résultat du travail du Projet 13, c'est-à-dire le refactoring de PostgreSQL vers Elasticsearch ainsi que la page /src/routes/search qui permet à la fois d'effectuer une recherche sur le contenu des notes et un filtrage de type and sur les tags.

Une démo est visible ici https://notes.develop.sklein.xyz/

Ma Developer eXperience avec Elasticsearch est excellente. J'ai trouvé toutes les fonctionnalités dont j'avais besoin.

Je pense que mon utilisation des Fleeting Note n'est pas la bonne. Je pense que les notes que je qualifie de Fleeting Note sont en réalité des Diary notes ou Journal notes.

J'ai donc décidé de :

  • [x] Renommer partout fleeting_note en journal_notes

Après implémentation, j'ai réalisé que j'ai fait l'erreur de mélanger l'implémentation de le page qui affiche la liste des notes antéchronologiques et la page de recherche.

Pour être efficace, le résultat de la page recherche doit être affiché en fonction du scoring de la recherche, alors que les pages listes de notes par date de publication.

J'ai donc décidé de :

  • [x] Implémenter une page /diaries/ (pour la cohérence des path en anglais, je préfère "diaries" à "journaux") qui affiche une liste de notes de type Diary notes ;
    • [x] Cette page doit permettre un filtrage par tags
  • [x] Implémenter une page /notes/ qui affiche une liste des notes qui ne sont pas de type Diary notes, comme des Evergreen Note, Hub note
    • [x] Contrairement à la page liste des Diary notes, cette page de liste ne doit pas afficher le contenu des notes, mais seulement le titre des notes ;
    • [x] Je propose de classer ces titres de notes par ordre alphabétique ;
    • [x] Je propose aussi de séparer ces notes par lettre, A, B… c'est-à-dire un index alphabétique.
    • [x] Cette page doit permettre un filtrage par tags
  • [x] Refactoring la page /search/ pour ordonner le résultat de la recherche par scoring.
    • [x] Cette page doit afficher le contenu des notes avec highligthing ;
    • [x] Cette page doit permettre un filtrage sur les types de notes, pour le moment Diary notes et Evergreen Note.
    • [x] Cette page doit permettre un filtrage par tags

Au moment où j'écris ces lignes, je ne sais pas encore comment je vais gérer les opérateurs or, (.

Pour le moment, le filtrage multi tags est effectué avec des and.

Mercredi 28 août 2024

Journal du mercredi 28 août 2024 à 11:31 #prometheus, #DevOps, #monitoring, #grafana, #DomainName, #JaiDécouvert

Je cherche depuis plusieurs années une solution pour surveiller la date d'expiration des noms de domaine en analysant le contenu de Whois.

#JaiDécouvert cet exporter Prometheus qui correspond exactement à mon besoin : https://github.com/shift/domain_exporter

En examinant l'historique du projet, je constate qu'il a été lancé en 2017. Il me semble pourtant avoir recherché ce type d'exporter en 2019 sans le trouver. Peut-être n'était-il pas encore assez mature à ce moment-là 🤔.

J'ai identifié aussi les projets suivants :

Pour le moment, je n'ai pas encore trouvé de dashboards Grafana pour cet exporter.

Journal du mercredi 28 août 2024 à 09:46 #css, #tailwindcss, #coding, #Web, #JaiLu, #JaiDécouvert

#JaiLu la documentation de UnoCSS.

Tailwind CSS is a PostCSS plugin, while UnoCSS is an isomorphic engine with a collection of first-class integrations with build tools (including a PostCSS plugin). This means UnoCSS can be much more flexible to be used in different places (for example, CDN Runtime, which generates CSS on the fly) and have deep integrations with build tools to provide better HMR, performance, and developer experience (for example, the Inspector).

-- Why UnoCSS?

Si je souhaite utiliser UnoCSS tout en conservant une compatibilité Tailwind CSS je dois utiliser Uno preset :

This preset is compatible with Tailwind CSS and Windi CSS, you can refer to their documentation for detailed usage.

#JaiDécouvert les features innovantes de UnoCSS :

<button
  bg="blue-400 hover:blue-500 dark:blue-500 dark:hover:blue-600"
  text="sm white"
  font="mono light"
  p="y-2 x-4"
  border="2 rounded blue-200"
>
  Button
</button>

Est l'équivalent de :

<button class="bg-blue-400 hover:bg-blue-500 text-sm text-white font-mono font-light py-2 px-4 rounded border-2 border-blue-200 dark:bg-blue-500 dark:hover:bg-blue-600">
  Button
</button>
<text-red> red text </text-red>
<flex> flexbox </flex>
I'm feeling <i-line-md-emoji-grin /> today!

Est l'équivalent de :

<span class="text-red"> red text </span>
<div class="flex"> flexbox </div>
I'm feeling <span class="i-line-md-emoji-grin"></span> today!

Je trouve ces syntaxes élégantes, mais, à ma connaissance, elles sont très peu courantes. Si je me mets à la place d'un développeur "onbordé" dans un nouveau projet utilisant le "attributify mode" et Tagify mode, je crains que cela puisse être un choc pour lui. Il me faudrait probablement plusieurs semaines avant que mon cerveau s'habitue à interpréter automatiquement cette syntaxe.

Je me demande donc si le gain final est réellement positif ou négatif.

Pour le moment, j'ai décidé que n'utiliserait pas les fonctionnalités "attributify mode" et Tagify mode.

Mardi 27 août 2024

Journal du mardi 27 août 2024 à 15:02 #idée, #JeMeDemande

Au cours des 12 derniers mois, j'ai été confronté à la nécessité de compléter de nombreux dossiers administratifs complexes, chacun comprenant un grand nombre de documents. Voici quelques exemples concrets :

  • J'ai dû rassembler et transmettre à mon courtier immobilier un dossier complet de 70 fichiers pour l'achat de mon logement, une opération impliquant quatre acteurs : le courtier, la banque, ma compagne et moi-même.
  • J'ai constitué et envoyé un dossier à un diagnosticien pour obtenir un certificat de Diagnostic de performance énergétique
  • J'ai préparé et soumis un dossier pour une assurance de prêt immobilier.
  • Dans le cadre de mes fonctions de président d'association :
    • J'ai demandé à des futurs employés de compléter un dossier d'embauche.
    • J'ai rédigé trois dossiers distincts pour effectuer trois demandes de subventions différentes.
    • J'ai constitué et transmis un dossier destiné au Commissaire aux comptes.
  • Demande de dossier pour l'entrée d'un locataire de logement.

Méthodes utilisées pour constituer et transmettre ces dossiers :

  • Partage via Google Drive ;
  • Envoi par email ;
  • Utilisation de plateformes en ligne proposées par certaines structures, comme la mairie ou le conseil départemental, pour l'upload des documents.

Difficultés rencontrées :

  • Identifier précisément les documents à fournir, avec un manque d'exemples ou de spécimens pour référence.
  • Gestion du workflow de validation des pièces.
  • Difficultés de nommage et d'identification des documents.
  • Problèmes de versionning des documents.
  • Difficile d'avoir une vue d'ensemble des documents manquants.
  • Suivi de la progression difficile.
  • Pas de statut clair si un document est validé ou non.
  • Méthode de notification de mise à jour de document imprécis.
  • Complexité accrue lorsque plusieurs personnes participent à la constitution d'un dossier.
  • Limites de taille pour certains documents.
  • Choix de la plateforme d'échange : certaines personnes refusent d'utiliser certains outils.
  • Conformité avec le RGPD.

Fort de cette expérience et des difficultés rencontrées, je m'interroge sur la possibilité de créer une application web capable de simplifier la constitution de dossiers.

Voici l'idée que j'envisage.

Souvent, un email ou un fichier PDF détaille les pièces nécessaires à la constitution d'un dossier.

Je propose de remplacer ou de compléter ces documents par une page web interactive. Cette page web intégrerait la documentation nécessaire ainsi que les emplacements pour uploader les documents requis.

L'objectif pour l'utilisateur chargé de rassembler les documents est de combler les "trous" : si un trou est visible, cela signifie qu'un document est manquant.

Les PDF seraient transformés en images miniatures, cliquables pour un aperçu en zoom, ce qui est bien plus pratique que d'ouvrir un PDF entier pour le consulter.

Dans ce croquis, j'ai tenté de représenter en bas à droite un composant d'interface permettant de savoir si une pièce est validée ou refusée (ce n'est qu'une première ébauche de cette fonctionnalité).

J'imagine également un espace dédié à la consultation des dernières activités effectuées sur le dossier.

L'interface utilisateur varierait légèrement en fonction du type d'utilisateur et de son rôle dans le processus. Par exemple, un courtier pourrait rapidement voir les pièces qu'il doit valider.

Je prévois aussi la possibilité de visualiser un spécimen du document, ainsi qu'un système de commentaires attachés à un document ou à un groupe de documents, permettant de comprendre facilement à quel document une remarque fait référence.

Je pense que tant la personne qui constitue le dossier que celle qui en demande la complétion pourraient devenir prescripteurs du service. Idéalement, c'est le demandeur des documents qui devrait être le prescripteur, car cela lui permettrait de configurer et documenter en amont un template de dossier. Ce template pourrait ensuite être réutilisé à volonté.

J'imagine également que le service pourrait envoyer un SMS contenant un message tel que « John Doe vous demande les documents suivants …url… » ou « Alice vous a envoyé les documents suivants …url… ».

Cela pourrait remplacer des solutions comme WeTransfer, Dropbox ou Google Drive.

Cette grande page web permettrait d'organiser et d'identifier clairement tous les documents, évitant ainsi de devoir gérer un amas de fichiers aux noms pas toujours explicites.

Si un utilisateur a un compte sur la plateforme, il pourrait très bien garder de coté des pièces très souvent demandé, comme sa carte d'identité par exemple.

Il serait également possible d'intégrer une fonctionnalité de chiffrement symétrique côté browser, pour assurer la confidentialité des documents (voir [référence 2024-08-27_1406]).

Une autre idée serait de proposer des templates préconfigurés :

  • Template standard pour une demande de location ;
  • Template standard pour une demande de prêt ;
  • Template standard pour un Diagnostic de Performance Énergétique (DPE).

De plus, si un utilisateur dispose d'un compte sur la plateforme, il pourrait conserver des documents fréquemment demandés, comme sa carte d'identité, pour les réutiliser facilement.

Idéalement, ce service serait distribué sous une licence de type fair source.

Pour l’implémentation, la première étape consisterait à configurer un template initial codé en dur, par exemple, un dossier de demande de location.

Ensuite, implémenter le système de gestion des documents manquants ("trous") avec un rendu des PDF sous forme d’images.

Ah… j'ai oublié quelque chose d'important ! #JeMeDemande si ce type de produit existe déjà !

Deux options s'offrent à moi : soit je me lance pour le plaisir et développe une première version de cette application, soit je prends les choses plus au sérieux et réalise une étude de marché 🤔.

Mon premier beta testeur pourrait être mon ami courtier en prêt immobilier.

Journal du mardi 27 août 2024 à 14:30 #JaimeraisUnJour, #idée

Quelques mots au sujet de kamal. Encore une fois, une oeuvre de David Heinemeier Hansson (DHH de Basecamp) ❤️.

https://kamal-deploy.org/

J'aime beaucoup la doctrine de DHH et c'est tout naturellement que kamal me plait.

Cependant, un bémol : je commence à me lasser des projets d'outillage développés en Ruby. Cette approche me semble un peu dépassée. À mon avis, Golang est bien mieux adapté pour ce type d'outil, ne serait-ce que parce qu'un outil développé en Golang peut être distribué sous la forme d'un simple binaire.

#JaimeraisUnJour créer un clone de kamal en Golang. Peut-être que je l'appellerai "Gamal" 🤔. #idée

Journal du mardi 27 août 2024 à 14:23 #selfhosting, #admin-sys, #JeMeDemande, #deployment, #JaiLu, #JaiDécouvert

#JaiLu en partie le thread Hacker News Dokku: My favorite personal serverless platform.

#JaiDécouvert :

J'ai apprécié ce tableau de comparaison de fonctionnalités entre dokploy, CapRover, Dokku et Coolify.

C'est la ligne "Docker compose support" qui a attiré mon attention.
Je reste très attaché au support de docker compose qui je trouve est une spécification en même temps simple, complète et flexible qui ne m'a jamais déçu ces 9 dernières années.

Attention, je n'ai pas bien compris si Dokku est réellement open source ou non 🤔.


Je constate que Dokploy est basé sur Docker Swarm.

Dokploy leverages Docker Swarm to orchestrate and manage container deployments for your applications, providing an intuitive interface for monitoring and control.

-- from

Choix qui me paraît surprenant puisque Docker Swarm est officieusement déprécié.

Je me suis demandé si K3s pourrait être une alternative à Docker Swarm 🤔.

Journal du mardi 27 août 2024 à 14:06 #coding, #chiffrement, #JaiDécouvert

Suite à une réflexion sur les solutions de chiffrement coté browser, #JaiDécouvert https://age-online.com/ :

Easily pass around secure data with age (everything is in-browser, powered by WASM, data does not go ANYWHERE).

Toujours sur le même sujet, #JaiDécouvert libsodium et libsodium.js.

#JaiDécouvert aussi que age utilise pour le chiffrement symétrique l'algorithme ChaCha20-Poly1305, qui est aussi proposé par libsodium.

Journal du mardi 27 août 2024 à 10:51 #JaiLu

#JaiLu Le retour de la vengeance des luddites technophiles de Ploum.

On ne peut pas. Un écran tactile nécessite de le regarder. On ne peut pas acquérir des réflexes moteurs sur un écran tactile.

Je suis tout à fait d'accord.

On ne peut pas former des marins capables d’agir intuitivement en situation de stress si l’interface change tous les 6 mois pour cause de mise à jour.

👍️

Dessin humoristique montrant une dame cherchant à acheter un ticket de train et se voyant rétorquer de rentrer chez elle, de créer un compte sur la plateforme, d’acheter le ticket, de le transférer sur son smartphone et que ce sera plus facile (aide appréciée pour retrouver l’auteur)

👍️

Contrairement à ce que la propagande nous fait croire, le luddisme n’est pas une opposition à la technologie. C’est une opposition à une forme de technologie appartenant à une minorité utilisée pour exploiter la majorité.

En effet et je vais faire attention de ne plus utiliser luddisme en ce sens.

D’après mon expérience, pour la majorité des utilisateurs, c’est une terrible période de stress où on ne peut plus faire confiance, certaines choses doivent être réapprises. Quand elles n’ont pas tout simplement disparu.

Tout à fait d'accord, je trouve qu'il y a généralement trop de grosse mise à jour.

Dernier exemple, il y a quelque jour, l'application Radio France sous Android que j'utilisé a subi une mise à jour importante de l'User Interface qui a entraîné chez moi, en plus des bugs, des notifications incessantes en boucle.
J'ai pesté, je me suis demandé pourquoi ils n'avaient pas opté pour une mise à jour plus légère de la version précédente. Ou alors, pourquoi ne pas avoir développé une seconde application, m'offrant une transition en douceur, à mon rythme, lorsque je me sentirais prêt.

J'ai l'impression que, de manière générale, les mises à jour des projets libres sont plus progressives, ce que j'apprécie particulièrement.

J’entends régulièrement que Telegram serait une messagerie chiffrée. Ce n’est pas et n’a jamais été le cas.

Ce qui est fou, c'est qu'à force d'entendre cette propagante, je vérifie environ tous les 3 mois si je suis dans l'erreur ou non.

Mais comment ce mensonge est-il devenu populaire ? Tout simplement parce que Telegram offre une possibilité de créer un « secret chat » qui lui est techniquement chiffré. Il y a donc moyen d’avoir une conversation secrète sur Telegram, en théorie. Mais en pratique ce n’est pas le cas, car :

  • Ces conversations secrètes ne fonctionnent que pour les conversations directes, pas pour les groupes.
  • Ces conversations secrètes sont difficiles à mettre en place
  • Ces conversations secrètes ne sont pas par défaut
  • Ces conversations secrètes n’utilisent pas les standards de l’industrie cryptographique, mais une solution « maison » développée par des personnes n’ayant aucune expertise cryptographique
  • L’entreprise Telegram (et le gouvernement russe) savent quand et avec qui vous avez initié un chat secret. Et ils peuvent le recouper avec la partie non secrète (imaginez un instant le « On passe sur le chat secret pour discuter de ça ? »).

😔

Ce qui confirme l’adage (que j’ai inventé) :

Les articles dans les médias grand public sont fiables sauf pour les domaines dans lesquels vous avez un minimum de compétences.

J'adore 👍️.

Journal du mardi 27 août 2024 à 10:33 #open-source, #JaiDécouvert

#JaiDécouvert le mouvement Copie Publique (from)

Ce mouvement formalise et donne un nom à une pratique que j'ai essayé maintes fois de mettre en place par le passé sans succès.

À l'avenir, Copie Publique m'aidera dans mon travail d'évangélisation.

Journal du mardi 27 août 2024 à 10:17 #neovim, #OnMaPartagé, #CodeAssistant, #artificial-intelligence, #JaimeraisUnJour

Alexandre m'a partagé avante.nvim.

#JaimeraisUnJour le setup pour le tester.

Cependant, une question me revient sans cesse à l'esprit en voyant ce genre d'outil utilisant les API d'AI Provider : est-ce que le coût d'utilisation de ce type de service ne risque pas d'être exorbitant ? 🤔
Je sais bien que ces AI Provider permettent de définir un plafond de dépenses, ce qui est rassurant. La meilleure approche serait donc de tester l'outil et d'évaluer les coûts mensuels pour voir s'ils restent raisonnables.

Lundi 26 août 2024

Journal du lundi 26 août 2024 à 22:10 #collaboration, #BonnePratique, #communication, #markdown

Lorsque vous collaborez avec moi et partagez du code source ou des extraits de terminal dans un logiciel compatible avec le format Markdown, tel que GitHub, GitLab, Mattermost, Zulip, etc., je vous encourage à entourer vos extraits avec des balises ```. Par exemple :

De même, pour les citations de texte en prose, utilisez les caractères > au début de chaque ligne, comme illustré ci-dessous :

> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse justo neque, facilisis ut commodo in, auctor at tellus. Morbi non mattis risus. In vehicula risus felis, ac ullamcorper magna consequat et.
> Sed finibus, lorem a rutrum pulvinar, magna urna rutrum tortor, eget faucibus dolor enim sit amet lacus. Nulla pulvinar ligula eu leo rhoncus faucibus.

Ce qui produira :

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse justo neque, facilisis ut commodo in, auctor at tellus. Morbi non mattis risus. In vehicula risus felis, ac ullamcorper magna consequat et. Sed finibus, lorem a rutrum pulvinar, magna urna rutrum tortor, eget faucibus dolor enim sit amet lacus. Nulla pulvinar ligula eu leo rhoncus faucibus.

Ces deux recommandations permettent d'améliorer le confort de lecture de vos messages.

Voir aussi je préfère recevoir les extraits de vos textes au format texte plutôt que sous forme de captures d'écran.

Journal du lundi 26 août 2024 à 21:59 #OnMaPartagé, #javascript, #datetime, #coding

Alexandre m'a partagé JS Dates Are About to Be Fixed

Many people think that by working with UTC or communicating dates in ISO format, they are safe; however, this is not correct, as information is still lost.

Oui ! J'ai souvent fait l'erreur !

La librairie : Temporal

Journal du lundi 26 août 2024 à 16:41 #JaiDécouvert

#JaiDécouvert l'expression "Pont aux ânes".

(Éducation) Obstacle apparent qui n’en est pas un, qui rebute les élèves les moins doués.

-- wiktionary

Journal du lundi 26 août 2024 à 15:09 #antipattern, #collaboration, #communication

Lorsque vous collaborez avec moi, je préfère recevoir les extraits de vos textes Markdown, vos codes sources, et le contenu de votre terminal au format texte plutôt que sous forme de captures d'écran.

Voici ci-dessous six inconvénients liés à l'utilisation de captures d'écran.

1. Impossibilité de copier le contenu

Lorsque vous partagez des lignes de commande, des configurations ou des messages d'erreur en capture d'écran, je ne peux pas copier le contenu pour le tester ou effectuer des recherches. Cela m'oblige à ressaisir manuellement le texte, avec le risque d'introduire des erreurs.

De plus, il m'est impossible de citer précisément une partie de votre contenu lors de nos échanges.

2. Impossible de cliquer sur les liens

3. Recherche inefficace

Les outils comme GitHub, GitLab, Slack, Zulip, Mattermost, Signal, WhatsApp, ainsi que les moteurs de recherche dans les pages des navigateurs, ne permettent pas de rechercher du texte présent dans des images. Le format texte, en revanche, est entièrement indexable et facilitera la recherche d'informations.

4. Consommation de mémoire multipliée par 100

Les captures écrans consomment beaucoup plus d'espace disque que du texte.

Prenons l'exemple d'un extrait de terminal au format texte :

# docker info
Client: Docker Engine - Community
 Version:    27.1.2
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.16.2
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.29.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 194
  Running: 194
  Paused: 0
  Stopped: 0
 Images: 34
 Server Version: 27.1.2
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2

Cet extrait consomme 682 octets de mémoire.

Je viens de vérifier : une capture d'écran équivalente consomme 83 000 octets de mémoire, soit 121 fois plus d'espace disque qu'un simple extrait de texte. Pour ceux qui utilisent des écrans haute résolution, comme les écrans Retina, cette consommation peut même être multipliée par 4.

Il est regrettable de saturer 100 fois plus rapidement l'espace disque sur des services comme GitHub, GitLab, Slack, Zulip, Mattermost, etc., pour une expérience utilisateur finalement moins optimale.

5. Chargement moins rapide des pages

Ceci est surtout impactant pour les issues ou Merge Request avec beaucoup de commentaires.

6. Occupation excessive de l'espace écran

Les captures d'écran, en particulier celles prises sur des écrans Retina, occupent souvent un espace d'écran excessif dans la fenêtre du navigateur, rendant la lecture des commentaires plus difficile et nuisant à la fluidité de la navigation.

Dimanche 25 août 2024

Journal du dimanche 25 août 2024 à 18:58 #coding, #print, #JaiDécouvert

Dans le thread Lobster Printing the web, part 2: HTML and CSS for printing books

#JaiDécouvert plusieurs la propriétés CSS :

The orphans property specifies the minimum number of line boxes in a block container that must be left in a fragment before a fragmentation break. The widows property specifies the minimum number of line boxes of a block container that must be left in a fragment after a break. Examples of how they are used to control fragmentation breaks are given below.

-- from

et

In addition to the specific CSS counter for page, you can use counter(pages) to get the total number of pages.

-- from

et

We are going to make use of the string-set property defined in the CSS Generated Content for Paged Media Module which is still a working draft at the W3C.

-- from

#JaiDécouvert aussi le projet Paged.js.

Paged.js is an Open source library to display paginated content in the browser and to generate print books using web technology.

-- from

Journal du dimanche 25 août 2024 à 12:44 #coding, #docker, #Kubernetes, #JaiDécouvert

En cherchant des informations au sujet de l'origine de la fonctionnalité compose watch, #JaiDécouvert Tilt (from).

Journal du dimanche 25 août 2024 à 11:00 #JaiDécouvert, #docker-compose, #coding, #OnMaPartagé

Alexandre m'a fait découvrir la fonctionnalité Compose Watch ajoutée en septembre 2023 dans la version 2.22.0 de docker compose.

Compose supports sharing a host directory inside service containers. Watch mode does not replace this functionality but exists as a companion specifically suited to developing in containers.

More importantly, watch allows for greater granularity than is practical with a bind mount. Watch rules let you ignore specific files or entire directories within the watched tree.

For example, in a JavaScript project, ignoring the node_modules/ directory has two benefits:

  • Performance. File trees with many small files can cause high I/O load in some configurations

  • Multi-platform. Compiled artifacts cannot be shared if the host OS or architecture is different to the container

    -- from

Je suis très heureux de l'introduction de cette fonctionnalité, même si je n'ai pas encore eu l'occasion de la tester. Bien que je trouve qu'elle arrive un peu tardivement 😉.

Je suis surpris d'observer que cette fonction a généré très peu de réaction sur Hacker News 🤔.

Je n'ai rien trouvé non plus sur Reddit, ni sur Lobster 🤔.

Sans doute pour cela que je n'ai pas vu la sortie de cette fonctionnalité.

Je pense avoir retrouvé la première Pull Request de la fonctionnalité compose watch : [ENV-44] introduce experimental watch command (skeletton) #10163.
Je constate que compose watch est basé sur fsnotify.
Je constate ici qu'un système de "debounce" est implémenté.
Je pense que c'est cette fonction qui effectue la copie des fichiers, mais je n'en suis pas certain et je ai mal compris son fonctionnement.

Entre 2015 et 2019, j'ai rencontré de nombreux problèmes de performance liés aux volumes de type "bind" sous MacOS (et probablement aussi sous MS Windows) :

volumes:
  - ./src/:/src/

Les performances étaient désastreuses pour les projets Javascript avec leurs node_modules volumineux. Exécuter des commandes telles que npm install ou npm run build prenait parfois 10 à 50 fois plus de temps que sur un système natif ! Je précise que ce problème de performance était inexistant sous GNU Linux.

Pour résoudre ce problème pour les utilisateurs de MacOS, j'ai exploré plusieurs stratégies de development environment, comme l'utilisation de Vagrant avec différentes méthodes de montage, dont certaines reposaient sur une approche similaire à celle de Compose Watch, c'est-à-dire la surveillance des fichiers (fsnotify…) et leur copie.

N'ayant trouvé aucune solution pleinement satisfaisante, j'ai finalement adopté la stratégie Asdf, puis Mise, qui me convient parfaitement aujourd'hui.

Cela signifie que, dans mes environnements de développement, je n'utilise plus Docker pour les services sur lesquels je développe, qu'ils soient implémentés en JavaScript, Python ou Golang...
En revanche, j'utilise toujours Docker pour les services complémentaires tels que PostgreSQL, Redis, Elasticsearch, etc.

Est-ce que la fonctionnalité Compose Watch remettra en question ma stratégie basée sur Mise ? Pour l'instant, je ne le pense pas, car je ne rencontre aucun inconvénient majeur avec ma configuration actuelle et l'expérience développeur (DX) est excellente.

Samedi 24 août 2024

Journal du samedi 24 août 2024 à 10:47 #coding, #svelte

Je cherche à mieux comprendre la syntaxe let:close utilisée dans le contexte de Svelte, comme dans l'exemple suivant :

<Popover>
  <PopoverButton>Solutions</PopoverButton>
  <PopoverPanel let:close>
    <button
      on:click={async () => {
        await fetch("/accept-terms", { method: "POST" });
        close();
      }}
    >
      Read and accept
    </button>
    <!-- ... -->
  </PopoverPanel>
</Popover>

Ce code provient du projet svelte-headlessui.

À première vue, cette syntaxe me faisait penser aux <slot key={value}> dans Svelte 🤔.
Cette intuition s'est confirmée après avoir exploré le concept plus en détail à travers l'exemple suivant :

<!-- FancyList.svelte -->
<ul>
	{#each items as item}
		<li class="fancy">
			<slot prop={item} />
		</li>
	{/each}
</ul>

<!-- App.svelte -->
<FancyList {items} let:prop={thing}>
	<div>{thing.text}</div>
</FancyList>

Après avoir lu la section sur les <slot key={value}> , je me rends compte que je n'utilise presque jamais les slots, à l'exception des layout. C'est dommage, car je passe à côté d'une fonctionnalité très pratique.

Vendredi 23 août 2024

Journal du vendredi 23 août 2024 à 21:35 #philosophe, #JaiDécouvert

#JaiDécouvert le philosophe Alfred Korzybski dans le livre Systemantics.

Il a fondé la sémantique générale, logique de pensée fondée sur les mathématiques et la physique du tournant du siècle, une discipline pratique pour que chacun puisse prendre un recul critique sur les réactions (non verbales et verbales) à un « événement » au sens large (comprendre ses propres réactions, ainsi que les réactions des autres et leur interaction éventuelle).

Quelle différence entre une Issue et un Ticket ? #gestion-projet, #jargon

Je préfère ne pas utiliser le terme « ticket » pour traduire « issue » en anglais.
Il m'arrive cependant d'employer « ticket » uniquement pour désigner les demandes de support ou les bugs.

Les définitions proposées par le Wiktionary et Wikipedia semblent corroborer cette distinction :

« Billet comportant un numéro d’ordre de passage dans une file d’attente. »

-- définition wiktionary.

« Une demande d'assistance, désignées ainsi dans le métier de l'assistance sous le nom de ticket. »

-- wikipedia

Le terme anglais « issue » a une portée bien plus large que celle de « ticket ». Il peut désigner :

ChatGPT me dit :

En français, le terme "issue" peut être traduit de différentes manières en fonction du contexte. Voici quelques traductions courantes :

  • Problème : C'est la traduction la plus directe et souvent utilisée. Elle est appropriée si l'"issue" en question concerne un bug ou un défaut à corriger.
  • Ticket : Ce terme est également couramment utilisé dans le contexte du suivi des tâches ou des bugs. Il est un peu plus neutre et peut désigner aussi bien un problème qu'une demande de fonctionnalité.
  • Tâche : Si l'"issue" représente quelque chose à faire (comme une nouvelle fonctionnalité à développer), "tâche" peut être une bonne traduction.
  • Demande : Ce terme peut être utilisé si l'"issue" est une requête ou une demande de changement.

En fonction du contexte précis, tu peux choisir le mot qui semble le plus approprié. Par exemple :

  • Pour un bug : Problème ou Bug.
  • Pour une nouvelle fonctionnalité : Tâche ou Demande.
  • De manière générale, dans le cadre d'un système de gestion de projet : Ticket.

Le terme "issue" est parfois laissé tel quel en français dans certains contextes techniques, surtout dans des équipes habituées aux outils comme GitLab ou GitHub.

Journal du vendredi 23 août 2024 à 12:35 #software-engineering, #git, #coding

Depuis des années, j'essaie de suivre avec rigueur la doctrine suivante dans les projets utilisant le workflow Trunk-Based Development.

  • La branche trunk doit toujours être stable et contenir uniquement du code fonctionnel.
  • Le code obsolète ou inutilisé doit être supprimé de la branche trunk.
  • Aucun code commenté ne doit figurer dans la branche trunk.
  • La branche trunk ne contient pas de tests qui échouent.

Pourquoi ?

  • Pour éviter qu'un développeur perde du temps à essayer de faire fonctionner quelque chose qui n'est pas en état de marche.
  • Pour éviter qu'un développeur refactore du code mort — j'ai observé à nouveau cela, il n'y a pas longtemps 😔. Quand le développeur fini par le découvrir, il est généralement très frustré.
  • Pour éviter l'installation et la mise à jour de bibliothèques qui alourdissent inutilement le projet.
  • Pour prévenir une perte de confiance dans le projet (voir l'hypothèse de la vitre brisée).

Et si j'ai besoin de ce code plus tard ?

Tout d'abord, je vous réponds "YAGNI" 🙂.

Plus sérieusement, ma réponse est que votre code ne sera pas perdu étant donné qu'il est versionné dans votre repository.

Si le code commenté est en cours de développement, alors je suggère d'extraire ce code en préparation dans une Merge Request et de la merger quand elle sera prête.

Trouvez le bon équilibre

Un morceau de code commenté ou un test qui échouent peut tout à fait rester dans trunk sur une courte période. Dans ce cas, je conseille d'ajouter en commentaire un lien vers l'issue de dette technique qui détaille l'action prévue.

Mercredi 21 août 2024

Journal du mercredi 21 août 2024 à 15:49 #OnMaPartagé, #security, #admin-sys

Alexandre m'a partagé OpenSCAP mais je n'ai pas encore pris le temps de l'étudier.

Journal du mercredi 21 août 2024 à 15:30 #svelte, #WebAPI, #coding, #JaiLu

#JaiLu pour la première fois la page de la Web API nommée Intersection Observer API.

Dans un projet Svelte, je crée dynamiquement un composant qui est inséré dans un élément non Svelte :

component = new myComponent({
	target: element,
	props: {
		foo: bar
	}
});

Cette Web API m'a permis de déterminer la position d'un composant lorsque celui-ci est réellement attaché à la page web.

<script lang="js">
    import { onMount } from "svelte";
    export let rootElement;
    onMount(() => {
        const observer = new IntersectionObserver(
            (entries) => {
                  entries.forEach(entry => {
                    if (entry.isIntersecting) {
						console.log(entry.boundingClientRect);
                        observer.disconnect();
                    }
                  });
            }
        );
        observer.observe(rootElement);
    });
</script>
 
<span bind:this={rootElement}>
    ...
</span>

Journal du mercredi 21 août 2024 à 10:37 #coding, #DevOps, #snippets, #docker, #docker-compose

Note de type snippets concernant docker compose et l'utilisation de la fonctionnalité healthcheck et depends_on.

Cette méthode évite que le service webapp démarre avant que les services postgres et redis soient prêts.

# Fichier docker-composexyml
services:
    postgres:
        image: postgres:16
        ...
        healthcheck:
            test: ["CMD", "sh", "-c", "pg_isready -U $$POSTGRES_USER -h $$(hostname -i)"]
            interval: 10s
            start_period: 30s

	redis:
	    image: redis:7
	    ...
	    healthcheck:
	      test: ["CMD", "redis-cli", "ping"]
	      timeout: 10s
	      retries: 3
	      start_period: 10s

    webapp:
	    image: ...
        depends_on:
            postgres:
                condition: service_healthy
            redis:
                condition: service_healthy

Ici la commande :

$ docker compose up -d webapp

s'assure du lancement de ses dépendances, les services postgres et redis.

De plus, si le Dockerfile du service webapp contient par exemple :

# Fichier Dockerfile
...
RUN apt update -y; apt install -y curl
...
HEALTHCHECK --interval=30s --timeout=10s --retries=3 CMD curl --fail http://localhost:3000 || exit 1

Alors, je peux lancer webapp avec :

$ docker compose up -d webapp --wait

Avec l'option --wait docker compose "rend la main" lorsque le service webapp est prêt à recevoir des requêtes.

Ressources :

Journal du mercredi 21 août 2024 à 10:16 #OnMaPartagé

#OnMaPartagé https://www.paat.ch/, communauté de Coliving Coworking.

Il semble possible d'organiser des sessions de coworking :

Je pense que ce site rassemble des logements propice au coworking :

Journal du mercredi 21 août 2024 à 10:08 #OnMaPartagé

#OnMaPartagé un nouvel article qui fait mention de Otium :

Jean-Miguel était l’invité de Gregory Pouy dans son Podcast Vlan! et définit l’otium, mot issu de l’Antiquité, comme “le loisir intelligent”. Il s’agit de “la part, dans le temps libre, utilisée pour développer sa conscience, tout ce qui permet d’avoir un rapport éclairé, lucide avec le monde extérieur et soi-même”.

-- from

Journal du mercredi 21 août 2024 à 09:53 #browser, #JaiDécouvert

#JaiDécouvert le browser Open source nommé Zen Browser basé sur Firefox qui reprends les principes de Arc (browser) (from)

Je viens de l'installer et de le lancer, il semble bien fonctionner. Je constate qu'il partage bien les extensions Firefox.

Toutefois, je n'ai pas trouvé comment effectuer des "split views", qui est la fonctionnalité qui m'intéresse le plus.

Je n'ai pas trouvé non plus comment activer le "Compact Mode".

J'arrête de tondre de Yak! pour le moment.

Journal du mercredi 21 août 2024 à 09:49 #JaiDécouvert

#JaiDécouvert csvbase (from).

Je trouve le projet très bien réaliséfélicitations à l'auteur !

Je pense que ce projet partage en partie les mêmes objectifs que Datasette.

Journal du mercredi 21 août 2024 à 09:39 #software-engineering, #git, #JaiDécouvert

Après avoir rédigé la note Commit Cavalier, #JaiDécouvert le concept de des projets de loi omnibus.

« Depuis les années 1980, cependant, les projets de loi omnibus sont devenus plus courants : ces projets de loi contiennent des dispositions, parfois importantes, sur un éventail de domaines politiques. »

-- from

Ceci m'a fait penser aux Merge Requests qui contiennent de nombreux petits commits, souvent de refactoring, qu'il serait fastidieux de passer en revue individuellement.

Je pense que je vais nommer ces Merge Request, des Merge Request Omnibus, ce néologisme sera une de mes marques idiosyncrasiques 😉.

J'ai donc décidé de baptiser ces Merge Requests des Merge Requests Omnibus. Ce néologisme deviendra l'une de mes marques idiosyncrasiques 😉.

Mardi 20 août 2024

Journal du mardi 20 août 2024 à 23:26 #software-engineering, #git, #coding

Je tente ici de présenter la notion de Git Commit dit "cavalier" en la reliant au concept de Cavalier Législatif.

Un cavalier législatif est un article de loi qui introduit des dispositions qui n'ont rien à voir avec le sujet traité par le projet de loi.

Ces articles sont souvent utilisés afin de faire passer des dispositions législatives sans éveiller l'attention de ceux qui pourraient s'y opposer.

-- from

Dans le contexte de développement logiciel, un Commit Cavalier désigne un commit inséré dans une Pull Request ou Merge Request qui n’a aucun lien direct avec l’objectif principal de celle-ci.

Cette pratique pose les problèmes suivants :

Il va sans dire que cette pratique a le don de m'irriter profondément. Par respect pour mon reviewer et mon équipe, je veille scrupuleusement à ne jamais soumettre de commit cavalier.

Journal du mardi 20 août 2024 à 18:13 #JaiDécouvert

#JaiDécouvert cette citation de Alan Kay (from).

« Pop culture is all about identity and feeling like you're participating. It has nothing to do with cooperation, the past or the future — it's living in the present. I think the same is true of most people who write code for money. They have no idea where their culture came from." -- from

Traduction ChatGTP :

« La culture pop concerne avant tout l'identité et le fait de ressentir que l'on participe. Elle n'a rien à voir avec la coopération, le passé ou le futur — c'est vivre dans le présent. Je pense que c'est la même chose pour la plupart des personnes qui écrivent du code pour de l'argent. Elles n'ont aucune idée de l'origine de leur culture. »

Source de cette citation : https://web.archive.org/web/20120715041026/http://www.drdobbs.com/architecture-and-design/interview-with-alan-kay/240003442?pgno=1

Journal du mardi 20 août 2024 à 18:05 #software-engineering, #git, #coding

Depuis 2012, je pratique exclusivement le Git Rebase Workflow pour tous mes projets de développement.

Concrètement :

  • J'utilise git pull --rebase quand je travaille dans une branche, généralement une Pull Request ou Merge Request ;
  • Je pousse régulièrement des commits en "work in progress" au fil de l'avancée de mon travail dans ma branche de développement avec la commande git commit -m "WIP"; git push ;
  • Une fois le travail terminé, je squash mes commits à l'aide de git rebase -i HEAD~[NUMBER OF COMMITS] ;
  • Ensuite, je rédige un commit message qui contient la description du changement et le numéro de l'issue ou de la merge request git commit --amend ;
  • Enfin, j'effectue un Merge en Fast-Forward en utilisant l'interface de GitHub ou GitLab.

Pour cela, je paramètre GitLab de la façon suivante (navigation "Settings" => "General") :

Ou alors je paramètre GitHub de la façon suivante (navigation "Settings" => "General")

Les avantages de cette pratique

L'approche Rebase + Squash + Merge Fast-Forard permet de maintenir l'historique de changements linéaire, rendant celui-ci plus facile à lire et à comprendre.

L'historique ne contient aucun commit de fusion inutile.

Cela facilite la mise en place d'Intégration Continue.

Tous les problèmes, bugs, et conflits sont traités dans les branches, dans les Merge Request et jamais dans la branche main qui se doit d'être toujours stable, ce qui améliore grandement le travail en équipe.

Ce workflow est particulièrement puissant lorsque l'historique linéaire ne contient que des commit dit "atomic", c’est-à-dire : 1 issue = 1 merge request = 1 commit. Un commit est considéré comme "atomic" lorsqu'il ne contient qu'un seul type de changement cohérent, tel qu'une correction de bug, un refactoring ou l'implémentation d'une seule fonctionnalité.

À de rares exceptions près, le code source de la branche main doit rester stable et cohérent tout au long de l'historique des commits.

Cette discipline favorise un travail collaboratif de qualité, rendant plus compréhensible l'évolution du projet.

De plus, l'atomicité des commits facilite la revue des Merge Request et permet d'éviter les Commits Cavaliers.

Généralement je couple ce Git workflow au workflow nommé Trunk-Based Development.

Journal du mardi 20 août 2024 à 17:37 #git, #coding, #article, #JaiDécouvert

#JaiDécouvert un article très intéressant qui répertorie les difficultés classiques rencontrées par les développeurs avec git rebase, ainsi que des solutions pour y remédier :git rebase: what can go wrong?.

Journal du mardi 20 août 2024 à 17:27 #git, #coding, #guide, #article, #JaiDécouvert

#JaiDécouvert ce guide pour Git : Flight rules for Git.

Je le trouve excellent 👌.


Et voici une autre article intéressant au sujet de Git rebase : git rebase in depth.

Journal du mardi 20 août 2024 à 14:35 #OnMaPartagé, #JaiDécidé

#OnMaPartagé la pratique suivante quand un projet utilise Mise : convertir tous les fichiers .tool-versions vers le format de configuration natif de Mise.mise.toml. Cette conversion permet d'éviter d'éventuels problèmes de compatibilité entre Mise et Asdf.

It supports the same .tool-versions files that you may have used with asdf and uses asdf plugins. It will not, however, reuse existing asdf directories (so you'll need to either reinstall them or move them), and 100% compatibility is not a design goal.

-- from

En utilisant le format .mise.toml l'utilisateur comprends qu'il doit utiliser Mise.

#JaiDécidé d'ajouter cette pratique dans ma doctrine d'artisan développeur.

Journal du mardi 20 août 2024 à 10:40 #OnMaPartagé, #Paris

Un ami ma partager cette adresse de coworking que j'avais déjà identifié lors d'un footing à la Cité internationale universitaire de Paris : L'Égyptien Café Coworking.

Il me dit que y a du café, Internet, des prises, que c'est parfait pour coworker.

J'ai découvert le registrar coopératif nommé LeBureau.coop #dns, #Internet, #DomainName, #JaiDécouvert, #todo

Dans ce thread Fediverse #JaiDécouvert LeBureau.coop.

Une société coopérative de gestion de noms de domaine (registrar).

La vidéo "Les noms de domaine pour se réapproprier Internet" de Arthur Vuillard à Pas Sage en Seine (à partir de 25min) contient une présentation de ce projet.

J'y ai au passage découvert la coopérative Hasshbang.

Dans ma #todo-list :

  • [ ] Transférer un de mes noms de domaine vers LeBureau.coop pour tester ;
  • [ ] Acheter des parts pour devenir sociétaire soutien.

[ << Notes plus récentes (651) ] | [ Notes plus anciennes (400) >> ]