Recherche effectué dans :

Filtre actif, cliquez pour en enlever un tag :

Cliquez sur un tag pour affiner votre recherche :

Résultat de la recherche (21 notes) :

Journal du mercredi 23 octobre 2024 à 10:53 #JaiDécidé

#JaiDécidé d'utiliser dans mes README l'expression figurée anglaise "Smoke test".

Inscription et migration vers social.coop #Fediverse, #coop, #mastodon, #JaiDécidé

Suite à l'étude de social.coop, #JaiDécidé de migrer mon compte Mastodon de l'instance Mamot.fr administré par La Quadrature du Net vers social.coop.

J'ai rempli le formulaire Registration Form.

À la question :

In up to 500 characters (the maximum length of a toot on Mastodon), can you tell us a bit about yourself? For instance, why you wish to join social.coop, and what hopes or aspirations you have for the site and/or your participation?

J'ai répondu :

Bonjour,

Je suis membre de la communauté Fediverse depuis 2018 (https://mamot.fr/@stephane_klein). J'ai décidé en novembre 2022 de réduire au maximum mon activité sur Twitter.

Cela fait plusieurs années que j'envisage de rejoindre une instance à laquelle je pourrais contribuer financièrement.

J'ai découvert social.coop et j'apprécie la gestion financière transparente du projet via https://opencollective.com/socialcoop ainsi que le mode de gouvernance basé sur Loomio.

Je serais ravi de rejoindre votre communauté.

Je suis français, basé à Paris. Plus d'informations sur https://sklein.xyz.

Bonne soirée, Stéphane

En rédigeant ce texte, je me demande s'il existe une communauté identique à social.coop, mais 100% francophone 🤔.

Traduction en anglais :

Hello,

I am a member of the Fediverse community since 2018 (https://mamot.fr/@stephane_klein). I decided in November 2022 to reduce my Twitter activity as much as possible.

For several years now, I've been considering joining an organization to which I could contribute financially.

I discovered social.coop and appreciate the transparent financial management of the project via https://opencollective.com/socialcoop as well as the mode of governance based on Loomio.

I would be happy to join your community.

I am French, based in Paris. More information on https://sklein.xyz.

Have a nice evening, Stéphane

J'attends la réponse à mon inscription.

Première itération de mon aventure Malt #freelance, #place-de-marché-freelances, #malt, #JeMeDemande, #JaiDécidé

Il y a quelques mois, j'ai envisagé de créer plusieurs profils sur Malt pour me présenter sous différentes "casquettes". Par exemple :

Cette idée m'est venue en 2022, lorsque j'étais CTO chez Spacefill et que je recrutais des freelances pour des missions très spécifiques.

Je m'étais alors rendu compte que la sélection des profils était fastidieuse et que je passais à côté de candidats intéressants simplement à cause de problèmes liés aux mots-clés.

C'est à ce moment-là que je me suis dit que si un jour je m'inscrivais sur une place de marché de freelances, il serait judicieux de créer plusieurs types de profils pour contourner ces limitations de filtres.

En août dernier, j'ai fait quelques recherches sur la possibilité de créer plusieurs profils sur Malt et je suis tombé sur cette page (webarchive):

Créer plusieurs profils dans Malt ?

Vous pouvez créer plusieurs profils dans Malt. Chaque compte doit être associé à une adresse e-mail différente.

Chez Malt, nous déconseillons de créer deux profils différents sur la marketplace sauf si vous avez deux activités très différentes, par exemple si vous êtes développeur et graphiste.

Vos filleuls et gains cumulés seront alors répartis entre plusieurs profils.

Si vous exercez deux activités indépendantes très différentes, nous vous conseillons de créer deux comptes distincts en prenant soin de télécharger les documents liés à votre(vos) activité(s).

Nous ne pourrons pas fusionner vos notes et projets entre vos deux profils.

Création de mon compte Malt

Je me suis ensuite dit qu'avant de mettre en place une stratégie complexe, qu'il serait plus judicieux de commencer par créer et publier un simple profil.

En remplissant ce profil, j'ai constaté que je pouvais renseigner une longue liste de compétences. J'ai alors pensé que l'idée de créer plusieurs profils n'était finalement plus nécessaire.

Premier point de difficulté, le choix de la catégorie :

J'ai opté pour une catégorie générique, celle de "Ingénieur logiciel".

Cependant, je doute fortement que ce soit le premier choix d'une personne que utilise le recherche de Malt 🤔 :

'ai fait un test en choisissant l'intitulé "Développeur". Après avoir filtré par mon tarif journalier exact et mon niveau d'expérience, je suis présent en page 6 des résultats.

Si je sélectionne la catégorie "Développeur Web Back-end" ou "Développeur Web Front-end" je ne suis plus présente dans la liste des résultats 😟.

Bilan Malt après 25 jours

Mon bilan Malt après 25 jours ? Pour le moment, personne ne m'a contacté. J'observe que mes statistiques sont plutôt mauvaises. De plus, je pense que les 3 personnes qui ont vu mon profil sont des amis.

Un ami freelance m'a confié qu'il n'avait reçu qu'une seule proposition de mission sur Malt en plus de trois ans.

Un autre ami freelance m'a confié avoir eu, sur un an, sur Malt, environ 40 propositions de mission, 5 échanges constructifs et signé deux missions.

Suite de stratégie Malt ?

Il est clair que mon profil Malt n'est pas optimisé.

J'ai visé trop large en listant mes compétences, et je pense que ce n'est pas la meilleure stratégie.

Le problème, c'est que si je veux rendre mon profil plus spécialisé, je vais devoir faire des choix et retirer des compétences que je ne souhaite pas supprimer 😞.

Pour éviter cela, je vois deux stratégies :

  • Modifier mon profil chaque semaine, en ajustant les technologies, les catégories et le tarif journalier ;
  • Créer plusieurs profils.

#JeMeDemande si l'étape de vérification des documents d'entreprise va m'empêcher de créer plusieurs profils 🤔.

#JeMeDemande s'il est préférable que je consacre prioritairement du temps à l'optimisation de mon profil Malt ou alors de travailler sur ma Stratégie de promotion de mon activité freelance sur LinkedIn 🤔.

#JaiDécidé de reporter l'optimisation de mon profil Malt.

Journal du lundi 02 septembre 2024 à 15:31 #vocabulaire, #JaiDécidé

J'utilise souvent le terme "rationale" pour donner une explication raissonnée d'une proposition.

Dans la description d'une issue, on trouve souvent une section intitulée "Motivation" et "Rationale", comme dans cette PEP : https://peps.python.org/pep-0625/

Pour être plus clair avec mes interlocuteurs moins familiers avec le vocabulaire des hackers, #JaiDécidé de remplacer « Rationale » par « raisons qui justifient cette proposition ».

Journal du lundi 02 septembre 2024 à 10:32 #vocabulaire, #idiosyncrasique, #JaiDécidé

Depuis janvier 2022, j'ai pris l'habitude de publier quotidiennement par écrit le contenu de mon Standup Meeting ou Daily Scrum.

Dans certaines situations, je publie ce message sans participer à un meeting synchrone.

En l'absence de réunion, l'appellation "standup meeting" ne semble pas appropriée. Je me pose la question de savoir comment nommer ce type de message, par exemple pour l'utiliser comme nom de channel.

Après quelques recherches sémantiques, #JaiDécidé d'utiliser les termes suivants :

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 jeudi 15 août 2024 à 20:00 #coding, #svelte, #SvelteKit, #icons, #JaiDécouvert, #JaiLu, #JaiDécidé

Depuis que j'utilise @tabler/icons-svelte pour intégrer des tabler-icons sur un projet SvelteKit SSR, je rencontre d'énormes problèmes de performance en mode développement (pnpm run dev).

Pour traiter le problème, j'ai essayé ce hack indiqué dans l'issue Slow experience in SvelteKit, mais cela ne fonctionne pas.

Toujours dans cette issue, #JaiDécouvert Iconify.

Je pense me souvenir d'avoir commencé à utiliser tabler-icons comme alternative Open source à Font Awesome.

J'ai lu la page page raconte l'histoire du projet et j'apprends que le projet s'est réellement lancé en 2020.

Iconify est devenu un projet Open source en 2021 :

In mid 2022 plans changed, thanks to people showing interest in sponsoring open source development.

The new plan is to:

  • Open source everything, encourage developers to create their own open source solutions that use Iconify.
  • Rely on sponsors to finance development.

-- from

Mais, d'après la page contributors le projet semble toujours très majoritairement développé par Vjacheslav Trushkin.

Je lis aussi :

Unlike fonts, it downloaded data only for icons used on page, rendered pixel perfect SVG. (from)

Par contre, je pense comprendre qu'Iconify n'est pas un projet de création d'icônes, mais un framework qui regroupe énormément d'icônes.

Par exemple, j'ai constaté qu'Iconify intègre entre autres :

Iconify propose des composants icônes pour Svelte : Iconify for Svelte.
Mais, je lis :

Loads icons on demand. No need to bundle icons, component will automatically load icon data for icons that you use from Iconify API. -- from

Cette technique « Loads icons on demand » ne me plait pas. Je souhaite réduire au maximum les latences dans mes applications web.

J'ai continué mes recherches.

#JaiLu Icon library for svelte? : sveltejs

#JaiDécouvert unplugin-icons (from).
unplugin-icons est un projet qui a commencé en 2021 et qui est basé sur Iconify.

Je constate que unplugin-icons propose une configuration SvelteKit.

J'ai testé et cela semble très bien fonctionner 🙂.

Le site https://icones.js.org permet de facilement copier-coller le code Javascript pour intégrer une icône. Par exemple, un click sur "Unplugin Icons" :

permet de copier :

import TablerChevronDown from '~icons/tabler/chevron-down'

Je ne constate aucun problème de lenteur au mode développement (pnpm run dev) et aucun chargement réseau externe des icônes dans la version de production.

#JaiDécidé d'adopter cette librairie pour gérer les icons de mes projets SvelteKit.

Journal du dimanche 11 août 2024 à 21:20 #JaiDécidé

Suite à ma note 2024-08-10_1726 en lien avec le Projet 11 - "Première version d'un moteur web PKM", #JaiDécidé de ne pas implémenter les pages /tags/{tag_name}/. À la place, je souhaite que les a href des tags point vers l'url suivante : /search/?tags=tagname.

Journal du samedi 10 août 2024 à 12:45 #JaiDécidé

Depuis avril 2024, je m'intéresse au sujet des Personal knowledge management et Zettelkasten. J'ai remarqué que Zotero occupe une place importante dans les workflows des utilisateurs de PKM.

Conséquence : #JaiDécidé de tester Zotero , afin de déterminer s'il peut m'être utile et comment l'intégrer efficacement dans mon propre workflow.

Journal du samedi 06 juillet 2024 à 15:15 #iteration, #postgresql, #pg_search, #apache-age, #JaiDécidé

#iteration du Projet 5 - "Importation d'un vault Obsidian vers Apache Age" et plus précisément la suite de 2024-06-20_2211, 2024-06-23_1057 et 2024-06-23_2222.

Pour le projet obsidian-vault-to-apache-age-poc je souhaite créer une image Docker qui intègre les extensions pg_search et Apache Age à une image PostgreSQL.

Pour réaliser cela, je vais me baser sur ce travail préliminaire https://github.com/stephane-klein/pg_search_docker.

#JaiDécidé de créer un repository GitHub nommé apache-age-docker, qui contiendra un Dockerfile pour builder une image Docker PostgreSQL 16 qui intègre la release "Release v1.5.0 for PG16" de l'extension Postgres Apage Age.

Journal du mardi 18 juin 2024 à 17:39 #coding, #eslint, #svelte, #JaiDécidé, #YAML

J'utilise encore eslint 8.57.0 et non pas la version 9 et #JaiDécidé d'arrêter d'utiliser le format #YAML (.eslintrc.yaml) pour configurer eslint pour les raisons suivantes :

Journal du mardi 18 juin 2024 à 14:22 #neovim, #JaiDécidé

J'utilise ma nouvelle configuration Neovim basé sur lazy.nvim et je n'arrive pas à faire fonctionner eslint dans mon projet Value Props.

J'ai essayé :

  • eslint-lsp et j'ai un message d'erreur, qui m'indique qu'il ne trouve pas de fichier de configuration. Je me demande si il ne supporte pas format .eslintrc.yaml 🤔.
  • eslint_d.js : quand je consulte le resélutat retournée par LSPInfo, je constate que eslint_d n'est pas lancé, je ne sais pas pourquoi 🤔.

Je souhaite que mon instance Neovim lance précisément le eslint configuré dans mon projet.
J'ai commencé à faire de recherche à propos de ce que j'utilisais avant, c'est à dire null-ls.nvim et je constate que ce projet est archivé.

Je constate que le projet null-ls.nvim continue à vivre à travers le fork nommé none-ls.nvim.

Je lis dans ce thread que plusieurs personnes conseillent : conform.nvim.

Lightweight yet powerful formatter plugin for Neovim

Je comprends que conform.nvim propose une fonctionnalité de formatage mais pas de "linting". Mais ici je vois qu'il supporte eslint_d 🤔.

En lisant ce thread j'ai beaucoup de difficulté à me faire un avis entre "conform+mvim-lint" versus "null-ls".

#JaiDécidé de tester conform.nvim + nvim-lint.


Après 1h de difficulté avec nvim-lint., #JaiDécidé par pragmatisme d'utiliser none-ls.nvim.

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

Journal du samedi 08 juin 2024 à 17:08 #iteration, #backup, #JaiDécouvert, #JeMeDemande, #JaiDécidé

Nouvelle #iteration sur Projet 7 - "Améliorer et mettre à jour le projet restic-pg_dump-docker".

Alors que je travaille sur cette partie du projet, je relis la documentation de pg_dumpall et je constate à nouveau que cette commande ne supporte pas les différents formats de sortie que propose pg_dump 😡.
C'est pénible… du coup, j'ai enfin pris le temps de chercher si il existe une solution alternative et #JaiDécouvert pg_back :

pg_back is a dump tool for PostgreSQL. The goal is to dump all or some databases with globals at once in the format you want, because a simple call to pg_dumpall only dumps databases in the plain SQL format.

C'est parfait, c'est exactement ce que je cherche 👌.

Mais je découvre aussi les fonctionnalités suivantes :

  • Pre-backup and post-backup hooks
  • Purge based on age and number of dumps to keep
  • Dump from a hot standby by pausing replication replay
  • Encrypt and decrypt dumps and other files
  • Upload and download dumps to S3, GCS, Azure or a remote host with SFTP

Conséquence : #JeMeDemande si j'ai encore besoin de restic dans Projet 7 🤔.

Je viens de lire ici :

In addition to the N previous backups, it would be nice to keep N' weekly backups and N'' monthly backups, to be able to look back into the far past.

C'est une fonctionnalité supporté par restic, donc pour le moment, je choisis de continuer à utiliser restic.

Pour le moment, #JaiDécidé d'intégrer simplement pg_back dans restic-pg_dump-docker en remplacement de pg_dumpall et de voir par la suite si je simplifie ce projet ou non.

Journal du samedi 08 juin 2024 à 10:35 #Inference, #MachineLearning, #vocabulaire, #llm, #JaiDécidé

Dans 2024-06-06_1047 #JaiDécidé d'utiliser le terme Inference Engines pour définir la fonction ou la catégorie de Llama.cpp.

J'ai échangé avec un ami au sujet des NPU et j'ai dit que j'avais l'impression que ces puces sont spécialés pour exécuter des Inference Engines, c'est-à-dire, effectuer des calculs d'inférence à partir de modèles.

Après vérification, dans cet article je lis :

An AI accelerator, deep learning processor, or neural processing unit (NPU) is a class of specialized hardware accelerator or computer system designed to accelerate artificial intelligence and machine learning applications, including artificial neural networks and machine vision.

et je comprends que mon impression était fausse. Il semble que les NPU ne sont pas seulement dédiés aux opérations d'exécution d'inférence, mais semblent être optimisés aussi pour faire de l'entrainement 🤔.

Un ami me précise :

Inference Engines

Pour moi, c'est un terme très générique qui couvre tous les aspects du machine learning, du deep learning et des algorithmes type LLM mis en œuvre.

et il me partage l'article Wikipedia Inference engine que je n'avais pas lu quand j'avais rédigé 2024-06-06_1047, honte à moi 🫣.

Dans l'article Wikipedia Inference engine je lis :

In the field of artificial intelligence, an inference engine is a software component of an intelligent system that applies logical rules to the knowledge base to deduce new information.

et

Additionally, the concept of 'inference' has expanded to include the process through which trained neural networks generate predictions or decisions. In this context, an 'inference engine' could refer to the specific part of the system, or even the hardware, that executes these operations.

Je comprends qu'un Inference Engines n'effectue pas l'entrainement de modèles.

Pour éviter la confusion, #JaiDécidé d'utiliser à l'avenir le terme "Inference Engine (comme LLama.cpp)".

Le contenu de l'article Wikipedia Llama.cpp augmente mon niveau de confiance dans ce choix de vocabulaire :

llama.cpp is an open source software library written in C++, that performs inference on various Large Language Models such as Llama

Journal du vendredi 07 juin 2024 à 17:12 #iteration, #backup, #JaiDécidé, #JeSouhaite

Nouvelle #iteration sur Projet 7 - "Améliorer et mettre à jour le projet restic-pg_dump-docker".

Hasard du calendrier, mon ami Alexandre travaille en ce moment sur un projet nommé restic-ftp-docker.

Quelle différence avec restic-pg_dump-docker ?

Principale différence d'objectif entre ces deux projets :


#JaiDécidé de reprendre un maximum d'élément du projet restic-ftp-docker dans restic-pg_dump-docker.

#JeSouhaite proposer une Pull Request à restic-ftp-docker pour étendre ce projet à tous les storages supporté par rclone et ne plus le limité au storage ftp.

Journal du jeudi 06 juin 2024 à 10:47 #llm, #MachineLearning, #LLM, #JaiDécidé, #JaiDécouvert, #JaimeraisUnJour

Cette semaine, j'ai déjeuné avec un ami dont les connaissances dans le domaine du #MachineLearning et des #LLM dépassent largement les miennes... J'en ai profité pour lui poser de nombreuses questions.
Voici ci-dessous quelques notes de ce que j'ai retenu de notre discussion.

Avertissement : Le contenu de cette note reflète les informations que j'ai reçues pendant cette conversation. Je n'ai pas vérifié l'exactitude de ces informations, et elles pourraient ne pas être entièrement correctes. Le contenu de cette note est donc à considérer comme approximatif. N'hésitez pas à me contacter à contact@stephane-klein.info si vous constatez des erreurs.

Histoire de Llama.cpp ?

Question : quelle est l'histoire de Llama.cpp ? Comment ce projet se positionne dans l'écosystème ?

D'après ce que j'ai compris, début 2023, PyTorch était la solution "mainstream" (la seule ?) pour effectuer de l'inférence sur le modèle LLaMa — sortie en février 2023.

PyTorch — écrit en Python et C++ — est optimisée pour les GPU, plus précisément pour le framework CUDA.
PyTorch est n'est pas optimisé pour l'exécution sur CPU, ce n'est pas son objectif.

Georgi Gerganov a créé Llama.cpp pour pouvoir effectuer de l'inférence sur le modèle LLaMa sur du CPU d'une manière optimisé. Contrairement à PyTorch, plus de Python et des optimisations pour Apple Silicon, utilisation des instructions AVX / AVX2 sur les CPU x86… Par la suite, « la boucle a été bouclée » avec l'ajout du support GPU en avril 2023.

À la question « Maintenant que Llama.cpp a un support GPU, à quoi sert PyTorch ? », la réponse est : PyTorch permet beaucoup d'autres choses, comme entraîner des modèles…

Aperçu de l'historique du projet :

Comment nommer Llama.cpp ?

Question : quel est le nom d'un outil comme Llama.cpp ?

Réponse : Je n'ai pas eu de réponse univoque à cette question.

C'est un outil qui effectue des inférences sur un modèle.

Voici quelques idées de nom :

  • Moteur d'inférence (Inference Engines) ;
  • Exécuteur d'inférence (Inference runtime) ;
  • Bibliothèque d'inférence.

Personnellement, #JaiDécidé d'utiliser le terme Inference Engines.

Autre projet comme Llama.cpp ?

Question : Existe-t-il un autre projet comme Llama.cpp

Oui, il existe d'autres projets, comme llm - Large Language Models for Everyone, in Rust. Article Hacker News publié le 14 mars 2023 sous le nom LLaMA-rs: a Rust port of llama.cpp for fast LLaMA inference on CPU.

Et aussi, https://github.com/karpathy/llm.c - LLM training in simple, raw C/CUDA (from).
Le README de ce projet liste de nombreuses autres implémentations de Inference Engines.

Mais, à ce jour, Llama.cpp semble être l'Inference Engines le plus complet et celui qui fait consensus.

GPU vs CPU

Question : Jai l'impression qu'il est possible de compiler des programmes généralistes sur GPU, dans ce cas, pourquoi ne pas remplacer les CPU par des GPU ? Pourquoi ne pas tout exécuter par des GPU ?

Mon ami n'a pas eu une réponse non équivoque à cette question. Il m'a répondu que l'intérêt du CPU reste sans doute sa faible consommation énergique par rapport au GPU.

Après ce déjeuner, j'ai fait des recherches et je suis tombé sur l'article Wikipedia nommé General-purpose computing on graphics processing units (je suis tombé dessus via l'article ROCm).

Cet article contient une section nommée GPU vs. CPU, mais qui ne répond pas à mes questions à ce sujet 🤷‍♂️.

ROCm ?

Question : J'ai du mal à comprendre ROCm, j'ai l'impression que cela apporte le support du framework CUDA sur AMD, c'est bien cela ?

Réponse : oui.

J'ai ensuite lu ici :

HIPIFY is a source-to-source compiling tool. It translates CUDA to HIP and reverse, either using a Clang-based tool, or a sed-like Perl script.

RAG ?

Question : comment setup facilement un RAG ?

Réponse : regarde llama_index.

#JaiDécouvert ensuite https://github.com/abetlen/llama-cpp-python

Simple Python bindings for @ggerganov's llama.cpp library. This package provides:

  • Low-level access to C API via ctypes interface.
  • High-level Python API for text completion
    • OpenAI-like API
    • LangChain compatibility
    • LlamaIndex compatibility
  • ...

dottextai / outlines

Il m'a partagé le projet https://github.com/outlines-dev/outlines alias dottxtai, pour le moment, je ne sais pas trop à quoi ça sert, mais je pense que c'est intéressant.

Embedding ?

Question : Thibault Neveu parle souvent d'embedding dans ses vidéos et j'ai du mal à comprendre concrètement ce que c'est, tu peux m'expliquer ?

Le vrai terme est Word embedding et d'après ce que j'ai compris, en simplifiant, je dirais que c'est le résultat d'une "sérialisation" de mots ou de textes.

#JaiDécouvert ensuite l'article Word Embeddings in NLP: An Introduction (from) que j'ai survolé. #JaimeraisUnJour prendre le temps de le lire avec attention.

Transformers ?

Question : et maintenant, peux-tu me vulgariser le concept de transformer ?

Réponse : non, je t'invite à lire l'article Natural Language Processing: the age of Transformers.

Entrainement décentralisé ?

Question : existe-t-il un système communautaire pour permettre de générer des modèles de manière décentralisée ?

Réponse - Oui, voici quelques liens :

Au passage, j'ai ajouté https://huggingface.co/blog/ à mon agrégateur RSS (miniflux).

La suite…

Nous avons parlé de nombreux autres sujets sur cette thématique, mais j'ai décidé de m'arrêter là pour cette note et de la publier. Peut-être que je publierai la suite un autre jour 🤷‍♂️.

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 🤔.

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 ?

Projet 12 - "Implémentation nodemailer-scaleway-transport" #scaleway, #admin-sys, #projet, #JaiDécidé, #transports

Date de la création de cette note : 2024-07-30.

Quel est l'objectif de ce projet ?

Implémenter et publier un plugin Nodemailer de transport pour l'API HTTP Transactional Email de Scaleway.

Pourquoi je souhaite réaliser ce projet ?

Les ports SMTP des instances computes de Scaleway sont par défaut fermés. Pour contourner cette contrainte, il est nécessaire d'effectuer une demande au support pour les ouvrir.
Partant de ce constat, #JaiDécidé d'utiliser le protocole HTTP autant que possible pour envoyer des e-mails.

Problème : je n'ai pas trouvé de plugin de transport Nodemailer pour Scaleway, ce qui a motivé la création de ce projet.

Repository de ce projet :

https://github.com/stephane-klein/nodemailer-scaleway-transport (non publié au moment de la rédaction de cette note)

Ressources :

Inference Engines #vocabulaire, #llm, #Inference, #JaiDécidé

Nom alternatifs à "Inference Engines" :

  • Exécuteur d'inférence (Inference runtime) ;
  • Bibliothèque d'inférence.

Personnellement, j'ai décidé d'utiliser le terme Inference Engines.

Update du 2024-06-08 : suite à 2024-06-08_1035, pour éviter la confusion, #JaiDécidé d'utiliser à l'avenir le terme "Inference Engine (comme LLama.cpp)".

Exemples de "Inference Engines" :

Dernière page.