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

[ << Notes plus récentes (601) ] [ Notes plus anciennes (450) >> ]

Mardi 10 septembre 2024

Lundi 9 septembre 2024

Journal du lundi 09 septembre 2024 à 16:03 #OnMaPartagé, #DevOps, #Kubernetes, #JaiLu

Alexandre m'a partagé le projet Grafana Tanka.

Flexible, reusable and concise configuration for Kubernetes.

Je découvre ce thread Hacker News que je n'ai pas pris le temps de lire : Tanka: Our way of deploying to Kubernetes.

#JaiLu Why not Helm?.

Journal du lundi 09 septembre 2024 à 15:59 #admin-sys, #DevOps, #Doctrine, #selfhosting

Dans cette note, je souhaite présenter ma doctrine de mise à jour d'OS de serveurs.

Je ne traiterai pas ici de la stratégie d'upgrade pour un Cluster Kubernetes.

La mise à jour d'un serveur, par exemple, sous un OS Ubuntu LTS, peut être effectuée avec les commandes suivantes :

  • sudo apt upgrade -y
  • ou sudo apt dist-upgrade -y (plus risqué)
  • ou sudo do-release-upgrade (encore plus risqué)

L'exécution d'un sudo apt upgrade -y peut :

  • Installer une mise à jour de docker, entraînant une interruption des services sur ce serveur de quelques secondes à quelques minutes.
  • Installer une mise à jour de sécurité du kernel, nécessitant alors un redémarrage du serveur, ce qui entraînera une coupure de quelques minutes.

Une montée de version de l'OS via sudo do-release-upgrade peut prendre encore plus de temps et impliquer des ajustements supplémentaires.

Bien que ces opérations se déroulent généralement sans encombre, il n'y a jamais de certitude totale, comme l'illustre l'exemple de la Panne informatique mondiale de juillet 2024.

Sachant cela, avant d'effectuer la mise à jour d'un serveur, j'essaie de déterminer quelles seraient les conséquences d'une coupure d'une journée de ce serveur.

Si je considère que ce risque de coupure est inacceptable ou ne serait pas accepté, j'applique alors la méthode suivante pour réaliser mon upgrade.

Je n'effectue pas la mise à jour le serveur existant. À la place, je déploie un nouveau serveur en utilisant mes scripts automatisés d'Infrastructure as code / GitOps.

C'est pourquoi je préfère éviter de nommer les serveurs d'après le service spécifique qu'ils hébergent (voir aussi Pets vs Cattle). Par exemple, au lieu de nommer un serveur gitlab.servers.example.com, je vais le nommer server1.servers.example.com et configurer gitlab.servers.example.com pour pointer vers server1.servers.example.com.

Ainsi, en cas de mise à jour de server1.servers.example.com, je crée un nouveau serveur nommé server(n+1).servers.example.com.

Ensuite, je lance les scripts de déploiement des services qui étaient présents sur server1.servers.example.com.

Idéalement, j'utilise mes scripts de restauration des données depuis les sauvegardes des services de server1.servers.example.com, ce qui me permet de vérifier leur bon fonctionnement. Ensuite, je prépare des scripts rsync pour synchroniser rapidement les volumes entre server1.servers.example.com et server(n+1).servers.example.com.

Je teste que tout fonctionne bien sur server(n+1).servers.example.com.

Si tout fonctionne correctement, alors :

  • J'arrête les services sur server(n+1).servers.example.com ;
  • J'exécute le script de synchronisation rsync de server1.servers.example.com vers server(n+1).servers.example.com ;
  • Je relance les services sur server(n+1).servers.example.com
  • Je modifie la configuration DNS pour faire pointer les services de server1.servers.example.com vers server(n+1).servers.example.com
  • Quelques jours après cette intervention, je décommissionne server1.servers.example.com.

Cette méthode est plus longue et plus complexe qu'une mise à jour directe de l'OS sur le server1.servers.example.com, mais elle présente plusieurs avantages :

  • Une grande sécurité ;
  • L'opération peut être faite tranquillement, sans stress, avec de la qualité ;
  • Une durée de coupure limitée et maîtrisée ;
  • La possibilité de confier la tâche en toute sécurité à un nouveau DevOps ;
  • La garantie du bon fonctionnement des scripts de déploiement automatisé ;
  • La vérification de l'efficacité des scripts de restauration des sauvegardes ;
  • Un test concret des scripts et de la documentation du Plan de reprise d'activité.

Si le serveur à mettre à jour fonctionne sur une Virtual instance, il est également possible de cloner la VM et de tester la mise à niveau. Cependant, je préfère éviter cette méthode, car elle ne permet pas de valider l'efficacité des scripts de déploiement.

Journal du lundi 09 septembre 2024 à 15:00 #scaleway, #pricing, #hosting

Dans cette note, j'essaie autant que possible de comparer des offres Bare-metal server, Elastic Metal et Virtual Instances de Scaleway, pour une puissance égale.

Je lis ici que les Virtual Instances "Workload-Optimized - POP2HC" sont exécutés sur des serveurs « AMD EPYC™ 7003 Series processors ».

Le serveur Dedibox Core-9-L avec un CPU "AMD EPYC 7313P" fait partie de la famille des 7003, équivalent je pense aux serveurs qui font tourner les Virtual Instances POP3HC.

Coté Elastic Metal, j'ai identifié le modèle EM-I210E-NVME avec un processeur de la famille 7003 : "AMD EPYC 7313P".

Tarif de ce serveur avec un engagement au mois : 239,99 € / mois et sans cet engagement : environ 480 € / mois.

Si je fais un bilan de comparaison :

  • Dedibox Core-9-L : 249 € / mois avec 256 GB de Ram et 3x1TB, engagement au mois. À cela il faut ajouter 329.99 € de frais de setup.
  • Elastic Metal EM-I210E-NVME : 239 € / mois avec 128 GB de Ram et 2x1.9 TB, engagement au mois. À cela il faut ajouter 239,99 € de frais de setup.
  • Elastic Metal EM-I210E-NVME : 480 € / mois avec 128 GB de Ram et 2x1.9 TB, engagement à l'heure
  • Virtual Instances POP2HC : 1464 € / mois, avec 256 GB de Ram et 3TB de volume

À puissance égale, une Virtual Instances est approximativement 6 fois plus cher qu'une Dedibox (sans prise en compte des frais de setup Dedibox qui s'élèvent à 329 €).

Il est important de noter que je pourrais manquer d'informations concernant les serveurs hébergeant les Virtual Instances, ce qui pourrait entraîner des erreurs dans mon analyse.

Je tiens également à préciser qu'une Virtual Instance offre, en théorie, une meilleure fiabilité grâce à la possibilité — toujours en théorie — de migrer à chaud d'un serveur à un autre.

Dimanche 8 septembre 2024

Journal du dimanche 08 septembre 2024 à 20:18 #javascript, #WebDev, #JaiDécouvert

#JaiDécouvert isbot.

Detect bots/crawlers/spiders using the user agent string

Journal du dimanche 08 septembre 2024 à 11:15 #JaiDécouvert

#JaiDécouvert Window.sessionStorage

L'objet global sessionStorage est similaire à Window.localStorage, à la différence que les données enregistrées dans sessionStorage ont une durée vie limitée et expirent à la fin de la session de navigation actuelle.

...

En revanche, une session de navigation n'est valable que pour le contexte de navigation actuel, c'est-à-dire que le fait d'ouvrir une page dans un nouvel onglet ou dans une nouvelle fenêtre provoquera l'initialisation d'une nouvelle session de navigation, ce qui diffère du comportement des sessions utilisant des cookies.

-- from

Je vais avoir besoin de sessionStorage pour le projet Idée d'un outil de session recoding web minimaliste basé sur rrweb.


2024-09-14 : j'ai nommé ce projet gibbon-replay.

Journal du dimanche 08 septembre 2024 à 11:03 #stoïcisme, #JaiDécouvert

#JaiDécouvert le nom du concept "dichotomie du contrôle" (from).

Je n'ai pas trouvé d'article Wikipedia sur ce sujet.

La "dichotomie du contrôle" est un principe clé dans la philosophie stoïcienne, notamment développé par Épictète. Elle distingue entre ce qui est en notre pouvoir et ce qui ne l'est pas. Selon les Stoïciens, seules nos propres actions, nos jugements et nos choix (notamment comment nous répondons aux impressions externes) sont sous notre contrôle. Tout le reste — y compris la richesse, la santé, ou l'opinion des autres — est considéré comme étant en dehors de notre pouvoir et, par conséquent, ne devrait pas influencer notre tranquillité d'esprit.

Le concept est central dans les enseignements d'Épictète, qui insiste sur l'importance de se concentrer uniquement sur ce qui dépend de nous, afin de mener une vie vertueuse et en accord avec la nature. Cette approche est explorée dans ses "Entretiens" et d'autres textes stoïciens, et constitue une base de la pratique stoïcienne pour atteindre la paix intérieure et la résilience face aux événements extérieurs.

-- from ChatGPT

Journal du dimanche 08 septembre 2024 à 10:18 #POC, #rrweb, #SvelteKit

J'ai envie d'essayer de créer un "mini" service de session recording, basé sur rrweb, SvelteKit et KeyDB ou DragonflyDB.
Je pense que ce projet pourrait être minimaliste 🤔.

-- from

J'ai publié https://github.com/stephane-klein/gibbon-replay (gibbon-replay).

J'ai passé 2h sur ce projet.

Samedi 7 septembre 2024

Idée d'un outil de session recoding web minimaliste basé sur rrweb #rrweb, #POC, #idée

Plus le temps passe, et plus le nombre de services présents dans les docker-compose.yaml de OpenReplay et Posthog augmente.

Je trouve ces services de plus en plus pénible à self hosted pour de petits besoins de session recording.

J'ai envie d'essayer de créer un "mini" service de session recording, basé sur rrweb, SvelteKit et KeyDB ou DragonflyDB.
Je pense que ce projet pourrait être minimaliste 🤔.


2024-09-14 : j'ai nommé ce projet gibbon-replay.

Journal du samedi 07 septembre 2024 à 21:44 #JaiLu, #JaiDécouvert

#JaiLu ce thread Hacker News : Rrweb – record and replay debugger for the web.

#JaiDécouvert highlight.io, replay.io, Zipy et wirequery qui semblent être des alternatives à Posthog et OpenReplay.

Tous ces outils sont basés sur rrweb.

wirequery semble être un projet 100% open source.

#JaiDécouvert un autre projet basé sur rrweb : RecordOnce pour générer des tutoriels.

Journal du samedi 07 septembre 2024 à 19:32 #DevOps, #admin-sys, #JeMeDemande, #JaiPublié

#JeMeDemande souvent comment nommer la méthode permettant d'installer des applications de manière scriptée.

Lorsque je recherche cette fonctionnalité, j'utilise généralement les mots-clés : "headless", "script", "cli".

Je constate que la roadmap de Proxmox utilise le terme « automated and unattended installation » :

Support for automated and unattended installation of Proxmox VE.

-- from

#JaiPublié cette question dans la section discussion du projet Plausible : Plausible automated and unattended installation support (create user and web site by script) · plausible/analytics.

Journal du samedi 07 septembre 2024 à 11:53 #WebDev, #JaiDécouvert

#JaiDécouvert le package goatcounter-js pour directement charger le code JavaScript de Goatcounter. Ce qui, je pense, permet d'éviter le blocage de chargement de ce script par uBlock Origin.

Vendredi 6 septembre 2024

Journal du vendredi 06 septembre 2024 à 17:05 #css, #SvelteKit, #skleinxyz

J'ai fait quelques recherches pour identifier quelle est la "meilleure" méthode pour implémenter un "Theme Switcher" pour un projet SvelteKit SSR.

J'ai trouvé cet article pertinent : How to implement a cookie-based dark mode toggle in SvelteKit.

En particulier, cette partie :

One might save the preference in the browser's local storage. With every page visit, we check with it if a theme is saved. This works well, but it will cause the website to flash because it takes some time to download and execute the JavaScript.

et un peu plus loin dans l'article :

After publishing this post, I was made aware that we can make the localStorage solution work also without flashing. Then we do not need any server-side logic and can also work with prerendered pages (such as a blog). In fact, the initial theme can be retrieved (via a media query or a localStorage value if it exists) in a script tag which is directly put into the body element of the app.html.

Voici une mise en pratique dans cet exemple : https://github.com/ScriptRaccoon/sveltekit-darkmode-toggler-localstorage/.

J'ai utilisé cette technique pour https://sklein.xyz.

Journal du vendredi 06 septembre 2024 à 10:10 #kernel, #linux, #rust, #JaiLu

#JaiLu Is Linux collapsing under its own weight? On Rust for Linux, j'ai trouvé cela très intéressant (from).

À la suite de cette lecture, j'ai lu ce thread Lobster : https://lobste.rs/s/yx57uf/is_linux_collapsing_under_its_own_weight.

J'ai lu Rust for Linux revisited de Drew DeVault, bien que n'étant pas un spécialiste du sujet, je trouve son idée intéressante.

Jeudi 5 septembre 2024

Journal du jeudi 05 septembre 2024 à 13:18 #JaiLu, #security, #JaimeraisUnJour

J'ai un peu parcouru la documentation de OpenBao, #JaimeraisUnJour faire un POC de cet outil.

Journal du jeudi 05 septembre 2024 à 11:52 #security, #JaiLu, #JaiDécouvert

#JaiLu The SOC2 Starting Seven (from)

First: for us, SOC2 is about sales. You will run into people with other ideas of what SOC2 is about. Example: “SOC2 will help you get your security house in order and build a foundation for security engineering”. No. Go outside, turn around three times, and spit. Compliance is a byproduct of security engineering. Good security engineering has little to do with compliance. And SOC2 is not particularly good. So keep the concepts separate.

-- from

😉

Suite à cela, j'ai lu l'article Wikipédia sur System and Organization Controls.

This is not an instruction guide for getting SOC2-certified. Though: that guide would be mercifully short: “find $15,000, talk to your friends who have gotten certified, get referred to the credible auditor that treated your friends the best, and offer them the money, perhaps taped to the boom box playing Peter Gabriel you hold aloft outside their offices”.

-- from

😉

If there is one thing to understand about SOC2 audits, it’s: SOC2 is about documentation, not reality.

-- from

🙈

Puis ils vous remettront un questionnaire de 52 000 lignes appelé Liste de demandes d'informations (IRL), basé d'une manière occulte sur ce que vous leur avez dit que vous faisiez. Vous le remplirez. Vous aurez quelques réunions, puis vous leur enverrez un chèque. Le nom de votre entreprise figurera sur un rapport.

-- from

🙈

#JaiDécouvert Shibboleth.

PRs, Protected Branches, and CI/CD

Enable Protected Branches for your master/deployment branches in Github. Set up a CI system and run all your deploys through it. Require reviews for PRs that merge to production. Make your CI run some tests; it probably doesn’t much matter to your auditor which tests.

We probably didn’t even need to tell you this. It’s how most professional engineering shops already run. But if you’re a 3-person team, get it set up now and you won’t have to worry about it when your team sprawls and new process is a nightmare to establish.

-- from

J'implémente systématiquement ce workflow dès que je travaille en équipe. Cependant, je me demande à partir de combien de développeurs cela devient réellement pertinent. Avant de lire cet article, je pensais que cela valait la peine à partir de trois développeurs.
À noter que ma motivation première de mise en place de ce workflow n'est pas la sécurité, mais la fluidité de développement en équipe et d'éviter les bugs.

Centralized Logging

Sign up for or set up a centralized logging service. It doesn’t matter which. Pipe all your logs to it. Set up some alerts – again, at this stage, it doesn’t matter which; you just want to build up the muscle.

-- from

Pour cela, j'utilise Grafana avec Loki branché sur un Object Storage.

The AWS console is evil. Avoid the AWS console.

Instead, deploy everything with Terraform (or whatever the cool kids are using, but it’s probably still just Terraform). Obviously, keep your Terraform configs in Github.

C'est aussi l'une de mes premières motivations pour utiliser Terraform ! 😊

#JaiDécouvert Munki, MicroDMD, NanoMDM qui sont des MDM.

Web Application Firewalls: Most SOC2’d firms don’t use them, and most WAFs don’t work at all.

-- from

🙂

Endpoint Protection and AV: You have MDM and macOS/Windows full complement of security features and a way to force them enabled, you’re covered. AV software is a nightmare; avoid it while you can.

-- from

🙂

Journal du jeudi 05 septembre 2024 à 10:37 #data-analytics, #llm, #JaiDécouvert

#JaiDécouvert Laminar (from)

« Laminar - Open-Source observability, analytics, evals and prompt chains for complex LLM apps. ».

Premier post de l'auteur à ce sujet sur hackers : Laminar – fast Rust backend and monitoring for AI applications

Mercredi 4 septembre 2024

Journal du mercredi 04 septembre 2024 à 08:30

Le 2024-02-15_1100 j'avais découvert Freenginx.

Je viens de prendre un peu de temps à étudier comment le projet a évolué.

De nouvelle version sont sorties :

Si je compare avec nginx (canal historique), je constate que Freenginx a des versions en avance.
Par contre, pour le moment, je n'ai aucune idée si les versions contiennent les mêmes corrections de bug et les mêmes feature.

Mardi 3 septembre 2024

Journal du mardi 03 septembre 2024 à 13:26 #coding, #SvelteKit, #svelte, #WebDev

Je viens de vérifier, il n'est toujours pas possible d'utiliser des slot nommés dans les layout SvelteKit : Treat layout pages like components when using named slots.

Lundi 2 septembre 2024

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 à 12:07

Je viens de découvrir une limite pénible à Discord : je souhaite poster mon Monthly Update, mais je suis limité à 2000 caractères. Je ne sais pas comment faire pour poster mon message 🤔.

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 :

Dimanche 1 septembre 2024

Journal du dimanche 01 septembre 2024 à 21:55 #WebDev, #frontend, #font

J'ai perdu énormément de temps à essayer de passer de ce rendu :

à celui-ci :

De base, j'utilise font-variant-caps: small-caps.

Ensuite, j'ai essayé les paramètres suivants pour obtenir des "lining figures" :

font-variant-numeric: tabular-nums;
font-variant-numeric: oldstyle-nums;
font-variant-numeric: lining-nums;
font-feature-settings: "lnum";

Rien n'y faisait !

J'ai fini par trouver la solution !

J'utilisais le package @fontsource/source-serif-pro or, celui contient des fontes de caractères au format TrueType et non pas OpenType.

$ hexdump -C -n 32 node_modules/@fontsource/source-serif-pro/files/source-serif-pro-latin-200-italic.woff
00000000  77 4f 46 46 00 01 00 00  00 00 5f 4c 00 0e 00 00  |wOFF......_L....|

00 01 00 00 signifie que la fonte de caractères est au format TrueType.

J'ai ensuite installé le package source-serif et cette fois, les Fontes de caractères sont au format OpenType.

$ hexdump -C -n 32 node_modules/source-serif/WOFF2/OTF/SourceSerif4-BoldIt.otf.woff2
00000000  77 4f 46 32 4f 54 54 4f  00 01 47 bc 00 0d 00 00  |wOF2OTTO..G.....|

4f 54 54 4f signifie que la fonte de caractères est au format OpenType.

Avec une fonte de caractères au format OpenType la hauteur des chiffres en small-caps est alignée avec la taille des lettres.

Journal du dimanche 01 septembre 2024 à 17:50 #npm, #coding, #JaiDécouvert

#JaiDécouvert que des fontes de caractères sont distribuées directement via npm.

Par exemple, la police de caractères source-serif utilisé par gwern.net, sous licence SIL Open Font est disponible via ce package npm https://www.npmjs.com/package/source-serif.

En creusant un peu plus le sujet, #JaiDécouvert https://fontsource.org qui est le projet qui semble packager toutes ces polices de caractères sur npm.

Journal du dimanche 01 septembre 2024 à 11:28 #nutrition, #JaiDécouvert

Dans le podcast Les gens de + de 30 ANS devraient TOUS savoir ça avec Gregoire Gibault de Major Mouvement et Léa Pateras-Pescara j'ai découvert la fonction des collagènes.

Quand on est stressé, on perd du magnésium.

#JaiDécouvert le laboratoire français de compléments alimentaires nommé NHCO.

Journal du dimanche 01 septembre 2024 à 10:42 #llm, #JaiLu

Suite à des échanges avec Alexandre au sujet de la "position" et de l'usage de Ollama dans le domaine des LLM, j'ai pris un peu de temps pour essayer d'y voir plus clair.

#JaiLu ce thread Reddit : newbie confusion: LocalLM / AnythingLLM / llama.cpp / Lamafile / Ollama / openwebui All the same? : LocalLLM

Voici ma description d'Ollama. Ollama est un wrapper au-dessus de Llama.cpp afin de rendre son utilisation davantage User Friendly. Ollama est écrit en Golang.

D'après :

Supported backends

-- from

et la présence de Llama.cpp directement dans le code source de Ollama

Je comprends que pour le moment, Ollama supporte uniquement le backend Llama.cpp.

Conclusion : je pense qu'il est préférable d'utiliser Ollama plutôt que directement Llama.cpp.

Samedi 31 août 2024

Journal du samedi 31 août 2024 à 17:29 #OnMaPartagé, #CodeAssistant, #llm, #Inference

Alexandre m'a partagé Continue.

Continue is the leading open-source AI code assistant. You can connect any models and any context to build custom autocomplete and chat experiences inside VS Code and JetBrains

Je lis ici que ce projet peut être assimilé à avante.nvim ou llm.nvim.

Je constate qu'il est possible de connecter Continue à beaucoup de types de LLM : Model Providers.

D'autre part, chose intéressante, Continue permet d'intégrer facilement du contexte provenant de diverses sources, telles que :

Je me pose toujours la même question que le 27 août :

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.

Journal du samedi 31 août 2024 à 17:26 #OnMaPartagé

Alexandre m'a partagé README-AI :

README file generator, powered by large language model APIs 👾.

Je trouve cela assez fun, bien que je ne suis pas sûr d'en avoir l'usage 🤔.

Vendredi 30 août 2024

Journal du vendredi 30 août 2024 à 15:24 #obsidian, #JaiDécouvert

#JaiDécouvert et je viens de tester le plugin Obsidian https://github.com/czottmann/obsidian-blockquote-levels. Je suis content, cela fait plusieurs mois que j'étais frustré de ne pas pouvoir indenter des "blockquote" sur plusieurs niveaux !

This plugin for Obsidian adds commands for increasing/decreasing the blockquote level of the current line or selection(s).

[ << Notes plus récentes (601) ] | [ Notes plus anciennes (450) >> ]