Recherche effectué dans :

Cliquez sur un tag pour affiner votre recherche :

[ << Page précédente (850) ] [ Page suivante (2452) >> ]

Journal du lundi 20 mai 2024 à 18:30 #JaiDécouvert

Une amie m'a fait découvrir ( #JaiDécouvert ) l'expression "NOLD" qui veut dire "Never Old".

L'expression "nold", contraction de "never" et de "old", autrement dit les "jamais vieux", désigne les 45-65 ans. Une génération qui ne se sent pas du tout vieille, bien décidée à ne pas être étiquetée "senior" passé la cinquantaine. Qu'est-ce qu'être nold, et d'où vient le concept ? Explications. - (from)"

Je pense que cette expression est pour le moment très confidentiel, je ne trouve rien sur :

En faisant une recherche sur Google Trend, je pense que cette expression est vraiment confidentiel :

Journal du lundi 20 mai 2024 à 15:13 #coding, #jupyter, #python, #javascript

Les deux fois où j'ai essayé d'utiliser Jupyter pour réaliser, par exemple, une calculatrice financière, j'ai fini par constater que je ne trouve pas cet outil pratique. Après quelques heures, je retourne soit à un script Python classique, soit à la création d'une page web basée sur HTML et JavaScript, qui me donne bien plus de flexibilité que Jupyter.

Il est possible que ce soit parce que je connais mal Jupyter, mais j'y ai tout de même consacré plus de deux heures hier soir, explorant notamment les Jupyter Widgets (ipywidgets).

Journal du lundi 20 mai 2024 à 11:17 #cli

Commande #cli pour convertir un fichier .mp4 en un .gif de 640px de largeur :

$ ffmpeg -i input.mp4  -vf "fps=10,scale=640:-1:flags=lanczos" -c:v pam -f image2pipe - | \
convert -delay 5 -layers Optimize - output.gif

Journal du lundi 20 mai 2024 à 11:01 #coding, #iteration, #svelte, #SvelteKit, #JeMeDemande, #JeLis

Nouvelle #iteration sur Projet 6 - "SvelteFlow playground".

Je me suis inspiré de l'exemple Drag and Drop pour implémenter ce commit, ce qui donne ceci :


11:19 : Prochaine étape, lire et comprendre Theming – Svelte Flow.


11:32 :


12:29 :

Upgrade de ma workstation de Fedora 39 vers 40 #linux, #fedora, #upgrade, #desktop

Fedora 40 version stable est sortie le 23 avril 2024 et presque un mois plus tard, j'ai upgrade mon Thinkpad T14s de la version 39 vers la version 40.

Que ce soit par le passé avec MacOS et maintenant avec Fedora, pour éviter d'être impacté par des bugs, ou des régressions, j'ai pris l'habitude d'attendre quelques semaines avant d'effectuer un upgrade d'OS majeur de ma workstation.

J'ai suivi la méthode officielle de mise à jour :

# dnf install dnf-plugin-system-upgrade
# dnf upgrade --refresh
# dnf clean all
# dnf system-upgrade download --releasever=40
# dnf system-upgrade reboot

et cela c'est déroulé avec succès.

Après 1h d'utilisation, je n'ai observé aucune régression.

Journal du vendredi 17 mai 2024 à 12:57 #llm, #POC, #MachineLearning, #scaleway, #JeMeDemande, #PremièreActionConcrète

#JeMeDemande combien me coûterait la réalisation du #POC suivant :

🤔.

Tarifs :

Dans un premier temps, j'aimerais me limiter aaux instances les moins chères :

  • GPU-3070 à environ 1 € / heure
  • L4-1-24G à 0.75 € / heure
  • et peut-être RENDER-S à 1,24 € / heure

Tous ces prix sont hors taxe.

Au moment où j'écris ces lignes, Scaleway a du stock de ces trois types d'instances :

  • #JeMeDemande comment je pourrais me préparer en amont pour installer rapidement sur le serveur un environnement pour faire mes tests.
  • #JeMeDemande s'il existe des tutoriaux tout prêts pour faire ce type de tâches.
  • #JeMeDemande combien de temps prendrait le déploiement.

Si je prends 2h pour l'installation + 3h pour faire des tests, cela ferait 5h au total.
J'ai cherché un peu partout, je n'ai pas trouvé de coût "caché" de setup de l'instance.
Le prix de cette expérience serait entre 4,5 € et 7,44 € TTC.


  • #JeMeDemande combien me coûterait l'achat de ce type de machine.
  • #JeMeDemande à partir de combien d'heures d'utilisation l'achat serait plus rentable que la location.
  • Si par exemple, j'utilise cette machine 3h par jour, je me demande à partir de quelle date cette machine serait rentabilisée et aussi, #JeMeDemande si cette machine ne serait totalement obsolète ou non à cette date 🤔.

Journal du vendredi 17 mai 2024 à 12:07

Dans le Projet 6 - "SvelteFlow playground" je dis :

Glisser / déposer 2 types d'objets vers un flow container.

Je pense me servir de l'exemple Drag and Drop comme source d'inspiration.

Je dis aussi :

Interdire les liaisons entre des objets de même type.

Je pense me servir de l'exemple Validation comme source d'inspiration.

Je dis aussi :

Idéalement j'aimerais que les objets soient placés "harmonieusement" entre eux dans le flow container.

Peut-être que le système de layout de SvelteFlow pourra m'être utile :

🤔

Journal du vendredi 17 mai 2024 à 11:05 #RAG, #llm, #MachineLearning, #JaimeraisUnJour, #JePense

Dans l'article "Qu'est-ce que la génération augmentée de récupération (RAG, retrieval-augmented generation) ?" je découvre l'acronyme Génération Augmentée de Récupération.

Je constate qu'il existe un paragraphe à ce sujet sur Wikipedia.

The initial phase utilizes dense embeddings to retrieve documents.

source

Je tombe encore une fois sur "embeddings", #JaimeraisUnJour prendre le temps de comprendre correctement cette notion.

Prenez l'exemple d'une ligue sportive qui souhaite que les fans et les médias puisse utiliser un chat pour accéder à ses données et obtenir des réponses à leurs questions sur les joueurs, les équipes, l'histoire et les règles du sport, ainsi que les statistiques et les classements actuels. Un LLM généralisé pourrait répondre à des questions sur l'histoire et les règles ou peut-être décrire le stade d'une équipe donnée. Il ne serait pas en mesure de discuter du jeu de la nuit dernière ou de fournir des informations actuelles sur la blessure d'un athlète, parce que le LLM n'aurait pas ces informations. Étant donné qu'un LLM a besoin d'une puissance de calcul importante pour se réentraîner, il n'est pas possible de maintenir le modèle à jour.

source

Le contenu de ce paragraphe m'intéresse beaucoup, parce que c'était un de mes objectifs lorsque j'ai écrit cette note en juin 2023.

Sans avoir fait de recherche, je pensais que la seule solution pour faire apprendre de nouvelles choses — injecter de nouvelle données — dans un modèle était de faire du fine-tuning.

En lisant ce paragraphe, je pense comprendre que le fine-tuning n'est pas la seule solution, ni même, j'ai l'impression, la "bonne" solution pour le use-case que j'aimerais mettre en pratique.

En plus du LLM assez statique, la ligue sportive possède ou peut accéder à de nombreuses autres sources d'information, y compris les bases de données, les entrepôts de données, les documents contenant les biographies des joueurs et les flux d'actualités détaillées concernant chaque jeu.

source

#JaimeraisUnJour implémenter un POC pour mettre cela en pratique.

Dans la RAG, cette grande quantité de données dynamiques est convertie dans un format commun et stockée dans une bibliothèque de connaissances accessible au système d'IA générative.

Les données de cette bibliothèque de connaissances sont ensuite traitées en représentations numériques à l'aide d'un type spécial d'algorithme appelé modèle de langage intégré et stockées dans une base de données vectorielle, qui peut être rapidement recherchée et utilisée pour récupérer les informations contextuelles correctes.

source

Intéressant.

Il est intéressant de noter que si le processus de formation du LLM généralisé est long et coûteux, c'est tout à fait l'inverse pour les mises à jour du modèle RAG. De nouvelles données peuvent être chargées dans le modèle de langage intégré et traduites en vecteurs de manière continue et incrémentielle. Les réponses de l'ensemble du système d'IA générative peuvent être renvoyées dans le modèle RAG, améliorant ses performances et sa précision, car il sait comment il a déjà répondu à une question similaire.

source

Ok, si je comprends bien, c'est la "kill feature" du RAG versus du fine-tuning.

bien que la mise en oeuvre de l'IA générative avec la RAG est plus coûteux que l'utilisation d'un LLM seul, il s'agit d'un meilleur investissement à long terme en raison du réentrainement fréquent du LLM

source

Ok.

Bilan de cette lecture, je dis merci à Alexandre de me l'avoir partagé, j'ai appris RAG et #JePense que c'est une technologie qui me sera très utile à l'avenir 👌.

Journal du jeudi 16 mai 2024 à 15:17 #freelancing, #services, #WorkInPublic

Voici une première liste de prestations freelance que je propose.

Le 16 mai, j'ai publié cette liste à l'adresse suivante : https://sklein.xyz/fr/services-freelance/

Pour en savoir plus à mon sujet, vous pouvez consulter https://sklein.xyz ou mon CV .

Prestation de développement

  • Lancement d'une application web de type MVP (Produit Minimum Viable) soignée, développée de déployée à partir de zéro sans bug.
  • Développement et déploiement à partir de zéro d'une Web API publique documentée, connectée à votre modèle de données.
  • Amélioration de la vitesse d'exécution de votre backend, qui peut passer par des optimisations des requêtes SQL, ajout d'index, adaptation du modèle de données…
  • Migration de votre projet de MySQL vers PostgreSQL.
  • Votre application a beaucoup de bugs… vous ne savez plus comment traiter ce problème ? Je peux vous aider à stabiliser votre application suivant une stratégie de court ou moyen terme.
  • Développement et déploiement d'une API GraphQL basé, sur PostGraphile ou Hasura.
  • Mise en place de tests d'User Interface automatisés de votre application, basés sur PlayWright.
  • Adaptation de votre frontend web codé en ReactJS, VueJS ou Svelte vers TailwindCSS et TailwindUI.

Prestation "pompier"

  • Correction de bugs sous forme de "quickwin".
  • Réduction des lenteurs de votre application sous forme de "quickwin".
  • Traitement en urgence de problèmes d'hébergement (hosting).

Prestation de conseil

  • Étude si une migration de votre projet d'une architecture monolithique vers une architecture en microservices est pertinente ou non.
  • Étude de réduction de la facture de votre infrastructure d'hébergement (cloud hosting).
  • Je peux vous aider à définir une stratégie de refactoring en douceur de votre projet, sans casser l'existant en migrant petite partie par petite partie.
  • Vous êtes enlisé dans de la dette technique, vous ne savez pas comment vous sortir de cette impasse ? Je peux peut-être vous aider.
  • Étude pour déterminer si l'utilisation d'une base de données orientée Graph type Neo4j peut être utile pour votre besoin métier, si c'est adapté à votre modèle de données.
  • Réalisation un prototype permettant de tester si l'utilisation d'une base de données OLAP, type ClickHouse pourrait être pertinente pour améliorer la performance de moteur de base de données.

Prestation de DataOps

  • Développement de scripts de data scraping, Web scrapping, automatisation d'action sans API...

Prestation d'infrastructure

  • Création ou amélioration d'un « Development Kit » pour votre ou vos projets informatiques.
    L'objectif de ce DevKit et d'accélérer l'intégration (onboarding) de vos développeurs, de rendre leur environnement de travail plus agréable et de faciliter la prise en main des projets en équipe.
  • Mise en place de processus automatisés ou semi-automatisés de "Continuous Delivery" basés sur GitLab-CI/CD ou GitHub Actions pour déployer votre projet sur des serveurs AWS, OVH, Scaleway, Hetzner, Vultr, ou DigitalOcean
  • Migration de projets multi-repository vers un monorepo.
  • Adaptation de vos projets à Docker, création d'images Docker ("Dockerisation") de vos applications.
  • Migration de votre projet d'une architecture monolithique vers une architecture en microservices.
  • Peut-être que l'architecture microservices n'était pas adaptée au niveau de maturité de votre projet ; dans ce cas, je peux vous aider à migrer votre projet d'une architecture en microservices vers une architecture plus simple de type monolithique.
  • Refactoring de votre infrastructure d'hébergement afin d'en réduire le coût.

Pour toutes ces prestations, mes livrables sont des Merge Request / Pull Request avec descriptions explicites prêtes à être review par votre équipe. J'aime pratiquer la méthode #WorkInPublic; par conséquent, l'évolution de mon travail est visible en continu via des commits, des commentaires ou des questions tout au long de la mission.

Journal du jeudi 16 mai 2024 à 08:36 #coding, #javascript, #codemirror, #documentation, #pensée, #JeMeDemande

#pensée : je travaille depuis plusieurs jours sur Projet -1 "CodeMirror, autocomplétion, Svelte" et je fais le constat que j'ai énormément de difficultés à comprendre et à utiliser la librairie #codemirror .

Bien que la documentation contienne déjà un certain nombre d'exemples, je constate que j'en ai besoin de beaucoup plus.

La documentation contient des exemples, mais la librairie est vaste et j'ai besoin de beaucoup plus d'exemples !

Comme je ne trouve pas mes réponses dans les exemples, je passe beaucoup de temps à :

#JeMeDemande si je dois essayer de passer du temps à lire et comprendre le code source de #codemirror 🤔.
Mais, je sais qu'il m'est difficile de comprendre et de me faire une carte mentale d'une librairie de cette taille 🤔.

#JeMeDemande si mes amis développeurs arriveraient plus facilement que moi à comprendre le code source de #codemirror 🤔.

Journal du mercredi 15 mai 2024 à 22:45 #tmux, #JePense, #JeMeDemande

Réflexion en travaillant sur 2024-05-15_2159 :

tmux is designed to be easy to script. Almost all commands work the same way when run using the tmux binary as when run from a key binding or the command prompt inside tmux. (from)

Voici un exemple de ce que je trouve élégant dans le design de tmux.
Les commandes tmux, comme par exemple set :

  • peut être exécuté via le shell avec l'exécutable tmux :
$ tmux set -g window-status-current-format "Foobar"
  • peut être utilisé dans le fichier de configuration tmux.conf :
set -g window-status-current-format "Foobar"
  • mais aussi en configurant un raccourcie clavier (ici cet exemple n'a pas trop de sens) :
bind-key x set -g window-status-current-format "Foobar"

C'est ce qui est expliqué ici :

Each command is named and can accept zero or more flags and arguments. They may be bound to a key with the bind-key command or run from the shell prompt, a shell script, a configuration file or the command prompt. For example, the same set-option command run from the shell prompt, from ~/.tmux.conf and bound to a key may look like:

  • $ tmux set-option -g status-style bg=cyan
  • set-option -g status-style bg=cyan
  • bind-key C set-option -g status-style bg=cyan

Le fonctionnement de tmux me fait aussi penser à i3 et sway…, plus précisément, les commandes utilisés dans leurs fichiers de configuration sont aussi exécutables via i3-msg commandname ou swaymsg commandename.

#JePense que c'est "çà" l'esprit Unix, des logiciels pour les utilisateurs qui ont un hacker mindset 🤔.

#JeMeDemande quels sont les autres logiciels qui suivent cet adn de tmux 🤔.

Journal du mercredi 15 mai 2024 à 21:59 #dotfiles, #linux, #unix, #terminal, #tmux

Je viens de modifier ma configuration (dotfiles) tmux :

https://github.com/stephane-klein/dotfiles/commit/f370721781f6ea1b72c1954f43ce50196112e72e

La configuration suivante

set -g window-status-current-format "#[fg=colour231,bg=colour33,bold] #{?window_name,#{window_name},#{b:pane_current_path}} #[nobold]"
set -g window-status-format "#[fg=colour33,bg=colour254,bold] #{?window_name,#{window_name},#{b:pane_current_path}} #[nobold]"

permet de définir cette ligne status :

Pour chaque fenêtre est affichée soit le nom de la fenêtre, soit le nom du dossier courant du shell actif dans la fenêtre.

La syntaxe suivante est documentée ici :

#{?window_name,#{window_name},#{b:pane_current_path}}

Ce qui signife #{?condition,true_value,false_value}.

La configuration suivante

bind-key c new-window -c "#{pane_current_path}" -n ""

-n "" permet de définir par défaut le nom des nouvelles fenêtres avec un chaine vide.

Journal du mercredi 15 mai 2024 à 17:59 #pensée, #LeMondeEstFou, #TikTok, #Instagram, #Web

Ici j'ai écrit :

Genèse du projet :

Linktree was established in 2016, out of annoyance regarding social media that do not allow multiple hyperlinks in profiles. The site was created in six hours. It is reported to have gained 3,000 users overnight. (from)

#pensée : c'est tout le même fou qu'une limitation aussi basique — limitation du nombre de liens dans la section bio —, que je classe dans la catégorie des dark pattern, crée tout un marché ! #LeMondeEstFou (je ne suis pas le seul à penser cela)

Cela me fait penser à ce thread :

Several of the major social media platforms - Instagram, TikTok, LinkedIn, Twitter - have effectively declared war on linking to things and I absolutely hate it

"Link in my bio" / "Link in thread" / "Link in first comment"... or increasingly no link at all, just an unsourced screenshot of a page

“Link In Bio” is a slow knife

En raison entre autres de ce type de dark pattern je considère que #TikTok et #Instagram ne font pas partie du #Web.
Une des raisons qui explique pourquoi je n'ai jamais utilisé ces services.

Journal du mercredi 15 mai 2024 à 12:12 #pensée, #LeMondeEstFou, #JaiDécouvert, #open

Quelques notes au sujet de l'application Linktree (https://linktr.ee/).

Genèse du projet :

Linktree was established in 2016, out of annoyance regarding social media that do not allow multiple hyperlinks in profiles. The site was created in six hours. It is reported to have gained 3,000 users overnight. (from)

#pensée : c'est tout le même fou qu'une limitation aussi basique — limitation du nombre de liens dans la section bio —, que je classe dans la catégorie des dark pattern, crée tout un marché ! #LeMondeEstFou (je ne suis pas le seul à penser cela)

Dans l'article Linktree is a dream #JaiDécouvert le nom du segment de marché "link in bio".

Alternative à LinkTree

Voici les choses que j'ai trouvées avec la recherche "Linktree" sur HackerNews :

Par thématique :

Par date :

Alternative OpenSource

  • Thread du 2024-04-20 : LittleLink - The DIY self-hosted LinkTree alternative. LittleLink has more than 100 branded button styles you can easily use.

Je pense que ce type d'outil est destiné à des utilisateurs qui ont des compétences limitées en web ou qui ne veulent pas y consacrer beaucoup d'énergie.
Par conséquent, je pense qu'une version #open-source de ce type d'outil a peu d'intérêt.

Journal du mardi 14 mai 2024 à 10:13 #UnJourPeuxÊtre

De retour sur Paris, mon séjour de 5 jours, du 8 au 13 mai, sur la Véloscénie, de Argentan à Dol-de-Bretagne c'est très bien passé 🙂.

Très beau temps pendant tout le séjour, mis à part un peu de pluie le lundi, 3 h avant de prendre le train.

#UnJourPeuxÊtre je prendrai le temps de détailler un peu plus ce séjour.

Château de Carrouges

Le Mont-Saint-Michel est visible au loin.

Bagnoles-de-l'Orne

Le dernier jour lors de l'attente de train à Dol-de-Bretagne vers Paris.

Journal du lundi 13 mai 2024 à 20:05 #data, #JeMeDemande

Note en lien avec Opération de nettoyage, curation de mes données Toggl et Fonctionnalité cluster and edit de OpenRefine.

Je pensais que Datasette pouvait être utilisé comme un outil de #data-curation mais je comprends que non, ce n'est pas dans "l'adn" du projet.

Voici ce que dit ici le développeur de Datasette :

For some developers, this is an odd choice - SQLite is an OLTP database, so why not support a few INSERT INTO or UPDATE statements?

The reasons, as laid out in that original blog post, are short and simple. For one, only handling read-only connections greatly reduces security risks. Datasette has SQL code execution as a first-class feature, so limiting any potential risk is important.

Plus, Datasette is a tool for publishing and exploring data. If you're investigating a government data dump or analyzing your city's annual budget, you don't want to edit data anyway!


J'ai trouvé ici une mention de OpenRefine par Simon Willison. J'y ai découvert datasette-reconcile mais pour le moment #JeMeDemande comment l'utiliser et à quoi cela pourrait me servir 🤔.

Journal du lundi 13 mai 2024 à 19:31 #marketing, #JeMeDemande

In my opinion you literally have about 5 seconds tops to get an idea across to most users on the internet

In "Don't Make Me Think!" (great book about UI/UX), they compare designing websites to designing roadside billboards; you have approximately the same time to get your point across to the viewer. (from)

Je comprends l'argument, je comprends pourquoi les auteurs disent cela, mais #JeMeDemande si cette "course" à la simplification nivelle le niveau par le bas.


Cela me fait aussi penser aux propos de cet article "Le marketing des logiciels, épisode 20240410 - LinuxFr.org".


Je pense aussi aux propos de Bernard Stiegler au sujet de pratiques marketing qui favorisent le « court-circuit de la pensée » — une altérération de notre capacité à penser de manière critique et approfondie — en jouant sur les pulsions.

Journal du lundi 13 mai 2024 à 19:07 #coding, #closure

Suite de Je m'interroge, pourquoi tant de beaux projets sont codés en Closure ?.

Encore Nautilus time-blocking tool que je trouve intéressant, codé en Closure : https://nautilus-omnibus.web.app

Voici les arguments que donne ici l'auteur de ce logiciel pour expliquer pourquoi il a choisi Closure :

It has to be said that Clojurescript is an excellent fit for text-based Roam. The Nautilus code in Clojurescript is, in a way, one “big function,” transforming text (task list) into another text (SVG code), which renders the spiral. What I enjoy most about working with Clojure is the mindset where code and data are almost one. With REPL, you can easily evaluate parts of the code for debugging and even rewrite code on the fly.

Hooray, and now Nautilus is finally part of the extensions menu in Roam Depot and it already has several hundred users. More are joining daily.

Fonctionnalité cluster and edit de OpenRefine #JaimeraisUnJour, #JaiDécouvert, #logiciel, #data

Il y a quelques semaines, #JaiDécouvert le #logiciel OpenRefine, qui permet de réaliser des tâches de #data-curation , plus précisément de #data-cleaning — mais pas seulement.

#JaimeraisUnJour prendre le temps d'essayer de nettoyer mes données Toggl avec OpenRefine.

Je lis ici que je peux manipuler plusieurs type de format de données :

From these sources, you can load any of the following file formats:

  • comma-separated values (CSV) or text-separated values (TSV)
  • Fixed-width columns
  • JSON

et

OpenRefine can connect to PostgreSQL, MySQL, MariaDB, and SQLite database systems


Je souhaite particulièrement tester la fonctionnalité cluster and edit de OpenRefine et surtout les différentes méthode de clustering.

Opération de nettoyage, curation de mes données Toggl #data, #JaimeraisUnJour

Je souhaite nettoyer ( #data-cleaning, #data-curation ) une année de données que j'ai collectées avec l'application Toggl.

Chaque ligne de données ressemble à ceci :

start: "2024-05-12 09:00"
stop: "2024-05-12 09:23"
duration: 1380
description: "Rédaction d'une note éphémères au sujet du netoyage de données"
tags:
  - écriture
  - clean-data

Voici les opérations de nettoyage que j'aimerais réaliser :

  • homogénéifier le contenu du champ "description" ;
  • ajouter ou supprimer des tags sur une liste de lignes sélectionnées par l'application d'un filtre.

Jusqu'à présent, j'effectue ce nettoyage via l'application web Toggl. Cela n'est pas très agréable pour les raisons suivantes :

  • Je trouve l'application très lente, ce qui m'insupporte !
    • La saisie au clavier dans un champ input est lente.
    • La recherche d'un tag est lente.
    • ...
  • Je ne peux pas sélectionner rapidement plusieurs lignes avec le clavier, je dois cliquer sur une case à cocher sur chaque ligne.

#JaimeraisUnJour trouver une méthode efficace et agréable pour réaliser mes tâches que #data-curation.

Journal du vendredi 10 mai 2024 à 19:47 #mauvaise-pratique

Le 29 avril, j'ai suivi deux mauvaises pratiques : imposer mon emploi du temps aux autres, demander de l'aide avant de documenter mon problème.
En résumé : commencer par du synchrone avant de l'asynchrone.

Voici ci-dessous ce qu'il s'est passé le 29 avril.


Je reçois un e-mail du cabinet comptable qui s'occupe du club de Tennis de Table.
J'apprends qu'il manque encore des informations pour clôturer l'exercice comptable 2022-2023 !

Je culpabilise et j'ai la volonté de clore tout de suite ce dossier déjà très en retard !
Fini la procrastination ! Je constate rapidement qu'il me manque des informations, que je ne suis en mesure de répondre aux questions du cabinet comptable.
J'ai besoin d'aide et je commence par suivre une bonne pratique :

  1. je commence par rédiger un email pour expliquer les éléments dont j'ai besoin pour clôturer le dossier ;
  2. j'envoie ce e-mail à Nicolas, Ludovic et Grégoire ;
  3. ensuite, je leur envoie un message privé à chacun, dans l'espoir d'avoir une réponse rapidement et peut-être de traiter ce problème dans l'heure.

J'ai quelques échanges par chat, mais aucun d'entre eux n'est disponible — ce qui est tout à fait normal, ce n'est pas leur priorité.
Je fais quelques progrès dans ma recherche d'information et je découvre un nouveau problème dans un des logiciels de gestion de remboursement de notes de frais.

C'est à ce moment là que je commence la mauvaise pratique 🫣.

Le problème que je rencontre est difficile à expliquer et au lieu de réaliser tout de suite un screencast, j'envoie le message suivant à Ludovic « Je peux t'embêter 10min en visio » ?
Il me répond que non, il n'est pas disponible.

Mon erreur ? Étant pressé, souhaitant absolument finir le sujet dans la journée, j'ai essayé de forcer mes collaborateurs à passer en mode synchrone, leur imposant mon emploi du temps !

Quelle était la bonne pratique à suivre ?

  • Commencer par réaliser un screencast pour bien expliquer le problème.
  • Partager ce screencast à Nicolas, Ludovic et à toute autre personne à qui je demanderai de l'aide sur ce sujet.
  • Laisser Nicolas et Ludovic étudier ce sujet en asynchrone.

Quels sont les bénéfices de suivre une méthode asynchrone ?

  • Respecter l'emploi du temps de mes amis en n'essayant pas de leur imposer mon emploi du temps !
  • Garder une trace numérique du problème à résoudre ! Je ne l'ai pas fait et 10 jours plus tard, au moment où j'écris ces lignes, je ne me souviens plus avec précision quelle était ma difficulté. Je vais devoir passer du temps à retrouver quel était mon problème.

Pourquoi je suis tombé dans mes travers, cette mauvaise pratique ?

  • Je pense que c'est parce que j'avais la volonté et l'illusion de clore rapidement — dans la journée — ce dossier.

Journal du vendredi 10 mai 2024 à 08:37 #iteration, #coding, #codemirror, #javascript, #JeMeDemande

#JeMeDemande si le code de SilverBullet.mb pourrait m'inspirer dans mon travail sur Projet -1 "CodeMirror, autocomplétion, Svelte" 🤔.

J'ai l'impression que le code qui m'intéresse se trouve vers ici.

Je pense que CompletionTooltip est la classe qui est responsable de l'affichage du "completion picker".


09:56 : J'ai réussi à afficher un "completion picker" minimaliste :


10:02 : Prochaines itérations :

  • [ ] Essayer d'implémenter le chargement de la liste d'items de suggestion de manière dynamique. Je souhaite obtenir cette liste via une requête GET http, sur l'url /get-suggestions/. Cette fonctionnalité est souvent nommée « remote data fetch » (exemple ici).
  • [ ] Essayer d'implémenter un chargement dynamique d'items de manière progressif. Au lieu de charger toutes la listes des items, l'objectif et de les charger au fur et à mesure, par exemple en petit paquets de 100 items). L'objectif de cette tache ressemble à https://github.com/vtaits/react-select-async-paginate.

Journal du mardi 07 mai 2024 à 10:09 #vélo, #séjour, #10

Suite de ma note 2024-05-06_1051.

Du mercredi 8 au lundi 13 mai, je vais faire 5 jours de vélo, une petite partie de la véloroute Véloscénie, de Argentan à Dol-de-Bretagne en passant par Le Mont-Saint-Michel.

Soit 174km au total, en 5 jours :

  • mercredi : 30 km
  • jeudi : 37 km
  • vendredi : 40 km
  • samedi : 45 km
  • dimanche : 22 km

Ce sont des petites distances, cela nous laissera du temps pour faire des détours.

Carte à jour avec toutes les informations sur des markers : https://umap.openstreetmap.fr/en/map/argentan-vers-mont-saint-michel-en-velo_1051084#10/48.6148/-1.0410

Timeline

Mercredi 8 mai (météo - pas de pluie, 11°c à 9h, 18°c à 16h) :

  • 8h00 : Réveil
  • 9h00 : Départ de Montrouge, vers chez Paulette (28min de métro). Stéphane part de son coté en vélo (16min de vélo).
  • 9h30 : Enlévement de la location vélo Sarah chez Paulette à l'adresse suivante 115 rue Brancion, 75015 Paris
  • 10h00 : Départ pour trajet en vélo de Paulette vers gare Montparnasse
  • 10h30 : Arrivé à la gare Montparnasse
  • 10h54 : Départ train de Gare Montparnasse => Argentan (76 € pour 2, espace vélo gratuit)(direct)
  • 12h38 : Arrivé à Argentan
  • 13h00 : Déjeuner
  • 14h00 : Course pour diner ?
  • 14h00 : Départ en vélo vers Lignieres Orgeres, trajet de 30km, à 10km/h, ça fait 3h de trajet
  • 18h00 : Arrivé sur Lignieres Orgeres
  • 19h00 : Les Herbages de Beauvais (adresse : Lieu dit de Beauvais 53140 Lignieres Orgeres) 75 € pour 2, avec petit dejeuner compris
  • Diner : Attention, j'ai l'impression qu'il n'y a aucun restaurant dans cette zone. (edit : pas grave, le gite fait table d'hôte, 25 € par personnes boissons et apéritif inclus)

Jeudi 9 mai (météo - pas de pluie, 12°c à 9h, 19°c à 16h):

  • 8h30 : Petit déjeuner à Les Herbages de Beauvais
  • 9h30 : Départ en vélo vers Domfront, trajet de 37 km, à 10km/h ça fait moins de 4h de trajet
  • 12h00 : Déjeuner, je pense qu'il y a des restaurant sur le trajet :
  • 19h00 : Chambres d'Hôtes Belle Vallee à Domfront (adresse) 100 € pour 2, avec petit déjeuner inclus.
  • 19h30 : Il y a des restaurant pour le diner.

Vendredi 10 mai (météo - pas de pluie, 14°c à 9h, 21°c à 16h):

Samedi 11 mai (météo - pas de pluie, 16°c à 9h, 26°c à 17h) :

Dimanche 12 mai (météo - pluie l'après midi et le soir, 15°c à 8h, 21°c à 12h) :

Lundi 13 mai (météo - pluie, 14°c à 8h, 15°c à 14h):

  • 8h30 : Petite déjeuner à Chambres d'hôtes La Bégaudière
  • 17h30 : Arrivé à la gare Dol De Bretagne
  • 17h58 : Départ train Dol De Bretagne vers Paris Montparnasse (222 € pour 2, espace vélo payant inclus)(direct)
  • 20h19 : Arrivé à Paris Montparnasse

Mardi 14 mai :

  • 9h30 : Rendre le vélo de Sarah

Détail location vélo pour Sarah chez Paulette :

  • VTC électrique - Taille : M : 166 €
  • Sacoches Arrière (Paire) : 22 €
  • Panier avant : 13 €

Total : 202 €

Le paramétrage de `search_path` PostgreSQL dans docker-compose ne fonctionne pas 🤨 #coding, #difficulté, #postgresql, #docker-compose, #docker, #JeMeDemande, #JaiLu, #ProblèmeRésolu

Je suis en train de travailler sur Projet 5 - "Importation d'un vault Obsidian vers Apache Age" et je rencontre une difficulté.

J'utilise cette configuration docker-compose.yml :

services:
  postgres:
    image: apache/age:PG16_latest
    restart: unless-stopped
    ports:
      - 5432:5432
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      PGOPTIONS: "--search_path='ag_catalog,public'"
    volumes:
      - ./volumes/postgres/:/var/lib/postgresql/data/
    healthcheck:
      test: ["CMD", "sh", "-c", "pg_isready -U $$POSTGRES_USER -h $$(hostname -i)"]
      interval: 10s
      start_period: 30s

Je ne comprends pas pourquoi, j'ai l'impression que le paramètre PGOPTIONS: "--search_path=''" ne fonctionne plus.

$ ./scripts/enter-in-pg.sh
postgres=# SHOW search_path ;
   search_path
-----------------
 "$user", public
(1 ligne)

postgres=#

La valeur de search_path devrait être ag_catalog,public.

J'ai testé avec l'image Docker image: postgres:16, j'observe le même problème.

Je suis surpris parce que je pense me souvenir que cette syntaxe fonctionnait ici en septembre 2023 🤔.

#JeMeDemande comment corriger ce problème 🤔.


#JaiLu docker - Can't set schema_name in dockerized PostgreSQL database - Stack Overflow


09:07 : #ProblèmeRésolu par https://github.com/stephane-klein/obsidian-vault-to-apache-age-poc/commit/0b1cef3a725550269583ddb514fa3fff1932e89d

Journal du lundi 06 mai 2024 à 15:23 #javascript, #coding, #JaiPublié

#JaiPublié le playground https://github.com/stephane-klein/mermaid-sveltekit-playground parce que j'ai besoin de faire une intégration Mermaid dans mon projet Value Props.

Ce playground n'a que peu d'intérêt pour le moment, mis à part de confirmer que je n'ai pas eu de difficulté à initialiser Mermaid dans un projet SvelteKit.

Journal du lundi 06 mai 2024 à 13:56 #meta, #OnMePoseLaQuestion

#OnMePoseLaQuestion suivante :

C'est quoi ta stats de temps moyenne d'écriture de notes éphémères ?

Entre le 29 avril au 6 mai inclus, j'ai passé 7h pour publier 40 notes éphémères et 5 projets, soit environ 10 minutes par note…

Journal du lundi 06 mai 2024 à 11:57 #Aucune-reformulation-par-une-IA, #JeMePoseLaQuestion

Je vais sans doute mal exprimer cette pensée, mais j'essaie tout de même.

J'ai l'impression que je suis une personne plus nostalgique que la majorité des personnes.

Il est très important pour moi de ne pas perdre ma mémoire, mes souvenirs, mon passé.

Je connais des personnes qui écrivent un journal intime.
Une page par jour ou par semaine, et cela, depuis plus de dix ans !
Je suis envieux, j'aurais aimé faire cela, mais je n'ai jamais eu la rigueur et j'ai toujours pensé que c'était trop tard — je trouve cette pensée très stupide.

Je ne tiens pas de journal intime, néanmoins, je souhaite, autant que possible, ne pas perdre mes informations numériques qui me permettent de garder de petites traces et m'aident à retrouver mes souvenirs. Quelques exemples :

  • mes photos stockées dans Google Photos. La plupart des photos contiennent une date précise et une localisation ;
  • mes e-mails, SMS, WhatApp, Signal, Mattermost, Slack, Matrix, Jabber… ;
  • mes traces de déplacement Google Maps ;
  • quand je dois me séparer d'un objet qui a fait partie de ma vie, je prends une photo avant de le jeter, pour ne pas l'oublier.

Malheureusement, j'ai déjà perdu beaucoup d'informations numériques, comme :

  • mes e-mails Yahoo de 1998 à 2004 ;
  • mes échanges Jabber (XMPP) de 2006 à 2015 ;
  • mes échanges Slack professionnels ;
  • plein de veielle photos ;
  • des vieux SMS de 1996 à 2015 ;

Quand je prends conscience de perdre ces informations, de perdre ces souvenirs, je pense mourir un peu. Personnellement, perdre mon passé, c'est un peu comme mourir un petit peu.

Toutes ces données sont importantes pour moi, bien que j'aie conscience qu'il y a peu de chance que je les consulte à la fin de ma vie… qu'elles me seront sans doute inutiles. J'ai aussi conscience que la collecte et la sauvegarde de ces informations demande bien trop d'effort par rapport à leur utilité.

Je ne suis "personne", je n'ai aucun intérêt à écrire plus tard mes mémoires… alors à quoi bon garder tout cela ?

Par moments, j'essaie de m'autopersuader de l'utilité de cette pratique en qualifiant cela comme une activité artistique. Si c'est de "l'art", je n'ai pas besoin de trouver d'utilité.

J'ai très peur du jour où je commencerai à perdre mes capacités cognitives et ma mémoire — ce moment a peut-être déjà commencé 🤔😱.
Je pense, en écrivant ces mots, au film Still Alice, qui m'avait beaucoup marqué.

J'ai l'impression que pour beaucoup de personnes, perdre ses souvenirs n'est pas quelque chose de très important.

#JeMePoseLaQuestion si cette impression correspond à la réalité ou non, je vais poser la question à des amis…

5 jours à vélo de Argentan à Dol-De-Bretagne #vélo, #séjour

Du mercredi 8 au lundi 13 mai, je vais faire 5 jours de vélo, une petite partie de la véloroute Véloscénie, de Argentan à Dol-de-Bretagne en passant par Le Mont-Saint-Michel.

Soit 174km au total, en 5 jours. Je pense que cela ne va pas être bien difficile.

Voici le trajet : http://u.osmfr.org/m/1051084/

Par contre, je suis inquiet pour la météo. Voici ce que me dit le modèle Prévisions plus fines (ICON-EU) de Meteo Ciel :

Mercredi :

Jeudi :

Vendredi :

Pas de pluie les 3 premiers jours, 14°C environ les matins et entre 19 et 21°c au plus chaud dans l'après-midi.

Le modèle Tendances météo à 10 jours me dit :

Si ces prédictions s'avèrent, peut-être que nous allons pouvoir éviter la pluie !

Remark vs gray-matter ? #markdown, #coding, #javascript, #JaiDécidé, #JeMeDemande

Dans Projet 5 - "Importation d'un vault Obsidian vers Apache Age", j'utilise les librairies remark mais pour le moment, je les trouve bien plus difficiles à utiliser que gray-matter couplé avec markdown-it.

Par exemple, je souhaite extraire dans un dict le contenu frontmatter de fichiers markdown, ainsi que la partie body.

Avec remark j'ai écrit avec difficulté le code suivant :

#!/usr/bin/env node
import { glob } from "glob";
import fs from 'fs';
import { unified } from 'unified';
import markdown from 'remark-parse';
import frontmatter from 'remark-frontmatter';
import extract from 'remark-extract-frontmatter';
import { parse } from 'yaml';
import stringify from 'remark-stringify';

const processor = unified()
    .use(markdown)
    .use(frontmatter, ['yaml'])
    .use(extract, { yaml: parse })
    .use(stringify);

const processMarkdown = async (filename) => {
    const fileContent = fs.readFileSync(filename);
    const result = await processor.process(fileContent);

    const body = result.toString().split(/---\s*$/m)[2] || '';

    return {
        frontmatter: result.data,
        body: body.trim()
    };
};

for (const filename of (await glob("content/**/*.md"))) {
    processMarkdown(filename).then(data => {
        console.log('Frontmatter:', data.frontmatter);
        console.log('Body:', data.body);
    });
}

Et voici mon implémentation avec gray-matter :

#!/usr/bin/env node
import { glob } from "glob";
import matter from "gray-matter";
import yaml from "js-yaml";

for (const filename of (await glob("content/**/*.md"))) {
    console.log(matter.read(filename, {
        engines: {
            yaml: (s) => yaml.load(s, { schema: yaml.JSON_SCHEMA })
        }
    }));
}

Je préfère sans hésitation cette seconde implémentation.

#JaiDécidé d'utiliser gray-matter.

#JeMeDemande quels seraient les avantages que j'aurai à utiliser remark 🤔.

Journal du vendredi 03 mai 2024 à 15:25 #JaiDécouvert, #data, #Business

En lisant l'article RootDB - une application web de reporting, auto-hebergée - LinuxFr.org #JaiDécouvert RootDB qui est un outil de #data-analytics #data-visualisation #Business-Intelligence.

En regardant rapidement les repositories GitHub, j'ai l'impression que ce projet vient tout juste d'être libéréré. Il est codé en PHP et me semble être limité à MariaDB.

Pour le moment, ce projet ne m'intéresse pas.

Il vient s'ajouter à ma liste des autres outils du même type : Datasette, Observable, Gitbi, Evidence, Metabase et Redash.

Journal du jeudi 02 mai 2024 à 22:57 #iteration, #graph, #coding, #POC

J'ai traité Projet 4 - "Je souhaite apprendre les bases d'utilisation de Apache Age".

Le résultat se trouve ici https://github.com/stephane-klein/apache-age-playground.

J'ai réussi à écrire plusieurs requêtes Cypher, mais je suis très loin de maitriser ce langage. Pour le moment, je me base principalement sur les exemples donnés dans la documentation.

Journal du jeudi 02 mai 2024 à 21:56 #JeSouhaite

Dans le cadre de Projet 4 - "Je souhaite apprendre les bases d'utilisation de Apache Age" #JeSouhaite essayer de setup https://github.com/apache/age-viewer.

J'ai l'impression que l'image Docker n'a pas été publié https://github.com/apache/age-viewer/issues/118.


$ git clone git@github.com:apache/age-viewer.git .
$ docker build . -t stephaneklein/age-viewer:8a7f0be2513e2aa4b2caf3d9833f4e2707f0001d
$ docker push stephaneklein/age-viewer:8a7f0be2513e2aa4b2caf3d9833f4e2707f0001d

J'ai pushé l'image sur https://hub.docker.com/r/stephaneklein/age-viewer

Journal du jeudi 02 mai 2024 à 21:34 #cypher, #coding, #pensée

Je suis en train de travailler sur Projet 4 - "Je souhaite apprendre les bases d'utilisation de Apache Age" mais pour le moment, je regrette de ne pas prendre le temps de bien lire toute cette documentation https://age.apache.org/age-manual/master/index.html pour apprendre Cypher. Je ne comprends pas pourquoi je ne fais pas cette effort alors que le sujet m'intéresse 🤔.

Journal du jeudi 02 mai 2024 à 19:37 #software, #open-source, #security, #OnMaPartagé

#OnMaPartagé ce projet https://pts-project.org/ :

The PiRogue Tool Suite is an open-source consensual digital forensic analysis and incident response solution that empowers organizations with comprehensive tools for network traffic analysis, mobile forensics, knowledge management, and artifact handling.

J'ai l'impression que c'est un outil lié à la sécurité informatique, mais après une première lecture de 2min, je ne comprends pas très bien ni son utilité ni son usage 🤔.

Comment définir la valeur par défaut des variables d'environement dans SvelteKit ? #SvelteKit, #configuration, #convict, #dotenv, #coding, #JaiDécidé

Finalement, contraiment à ce que j'avais décidé ici, je n'ai pas utilisé Convict dans mon application Value Props propulsé par SvelteKit.

J'ai "simplement" utilisé la vite-plugin-environment pour définir la valeur par défaut des variables d'environnement de configuration utilisées par l'application.

Exemple :

// vite.config.js
import { defineConfig } from "vite";
import EnvironmentPlugin from 'vite-plugin-environment'
import { sveltekit } from "@sveltejs/kit/vite";

export default defineConfig({
    plugins: [
        EnvironmentPlugin({
            POSTGRES_URL: "postgres://webapp:password@localhost:5432/myapp",
            Y_WEBSOCKET_URL: "ws://localhost:1234",
            SMTP_HOST: "127.0.0.1",
            SMTP_POST: 1025,
            SECRET: "secret"
        }),
        sveltekit()
    ]
});;

Et voici un exemple d'utilisation de ces paramètres de configuration :

// src/lib/server/db.js
import postgres from "postgres";

const sql = postgres(process.env.POSTGRES_URL);

export default sql;

Rien de plus, je n'ai ni utilisé Convict ni dotenv, j'ai pu suivre le principe KISS.

J'ai décidé de continuer à utiliser la lib Convict de configuration management #dotenv, #librairie, #configuration, #coding, #JaiDécidé

En 2024, quelle est la librairie JavaScript de configuration management la plus populaire ?

Après avoir parcouru la documentation de env-cmd et dotenv

Après avoir réalisé que je n'avais rencontré aucun problème avec node-convict et que j'avais même pris du plaisir à l'utiliser.

Suite au feedback d'un ami qui me dit :

J'aime beaucoup convict qu'on a utilisé dans gibbon-mail

Et qui me rappelle que dotenv est très orienté "fichier de conf" alors que lui comme moi suivons plutôt la doctrine "variable d'env" (The Twelve-Factors App).

#JaiDécidé que je n'allais suivre la mode, que je vais continuer à utiliser Convict.


Une heure plus tard, j'ai changé d'avis Comment définir la valeur par défaut des variables d'environement dans SvelteKit ?

Journal du mercredi 01 mai 2024 à 16:37 #IndieHacker, #dotenv, #SaaS

En étudiant le projet dotenvici, ici et ici — je découvre que son auteur est un Indie Hacker, qui opère à lui tout seul le service SaaS dotenv (partie payante "Vault").

C'est typiquement ce type de projet que j'aurais aimé créer ! Mais je n'ai pas eu l'idée, bien qu'elle semble tellement évidente après l'avoir observée !

Je me demande s'il a beaucoup d'utilisateurs 🤔.

J'ai trouvé son compte sur Indie Hackers, mais je ne trouve aucune information, cependant j'ai l'impression en lisant ce billet qu'il a lancé ce service en 2022, ce que semble confirmer la page contribution du repository dotenv-vault.

J'ai ensuite trouvé ce compte, il semble qu'en 2022, quelque temps après le lancement du projet, il générait 750$ de revenus par mois.

Mais, depuis, le projet semble avoir gagné beaucoup d'utilisateurs :

[ << Page précédente (850) ] | [ Page suivante (2452) >> ]