Recherche effectué dans :

Cliquez sur un tag pour affiner votre recherche :

[ << Page précédente (550) ] [ Page suivante (3126) >> ]

Journal du mardi 17 septembre 2024 à 18:48 #WebDev, #javascript, #datetime

Suite de 2024-09-17_1707.

Mon but est toujours de convertir une donnée datetime UTC vers la timezone du navigateur.

L'équivalent du code :

return Temporal.PlainDateTime
	.from(value)
	.toZonedDateTime('UTC')
	.withTimeZone(
		Intl.DateTimeFormat().resolvedOptions().timeZone
	)
	.toString({
		offset: 'never',
		timeZoneName: 'never'
	})
	.replace('T', ' ');

avec date-fns est :

import { format } from 'date-fns';
import { fromZonedTime, toZonedTime } from 'date-fns-tz';

return format(
	toZonedTime(
		fromZonedTime(value, "UTC"),
		Intl.DateTimeFormat().resolvedOptions().timeZone
	),
	"yyyy-mm-dd HH:MM:SS"
);

Ce qui m'évite de devoir utiliser .replace('T', ' ').

Par contre, j'aurais bien aimé pouvoir utiliser une syntax du style :

return (
	fromZonedTime(value, "UTC")
	.toZonedTime(Intl.DateTimeFormat().resolvedOptions().timeZone)
	.format("yyyy-mm-dd HH:MM:SS")
);

ce qui ne semble pas possible avec dns-fns.

Luxon semble proposer une syntax plus agréable :

import { DateTime } from 'luxon';

return DateTime
  .fromISO(value, { zone: 'UTC' })
  .setZone(Intl.DateTimeFormat().resolvedOptions().timeZone)
  .toFormat('yyyy-MM-dd HH:mm:ss');

Journal du mardi 17 septembre 2024 à 17:07 #WebDev, #javascript, #datetime

Ici, dans le projet gibbon-replay, j'ai utilisé la librairie Temporal.

import { Temporal } from 'temporal-polyfill';

return Temporal.PlainDateTime
	.from(value)
	.toZonedDateTime('UTC')
	.withTimeZone(
		Intl.DateTimeFormat().resolvedOptions().timeZone
	)
	.toString({
		offset: 'never',
		timeZoneName: 'never'
	})
	.replace('T', ' ');

Le but est de convertir une donnée datetime UTC vers la timezone du navigateur.

Cependant, j'ai été déçu de constater qu'il n'existe pas de fonction de formatage intégrée similaire à celle de date-fns pour formater une date/heure.

Je trouve dommage de devoir utiliser .replace('T', ' '); pour supprimer le caractère T dans la date formatée.

Journal du lundi 16 septembre 2024 à 17:54 #scaleway, #Illiad, #Free, #datacenter, #JaiLu

#JaiLu Trois candidats retenus pour racheter 49% des data centers d'Iliad

Si les résultats opérationnels, selon les ratios du marché, impliquerait une valorisation à hauteur de 700 millions, Iliad table pour sa part pour près d’un milliard. L’investisseur devra par ailleurs s’engager sur des investissements de 2.5 milliards d’euros sur dix ans. D’autant qu’Iliad entend ajouter des nouveaux centres à sa flotte d’ici à 2026, ce qui devrait permettre d’accroître les résultats opérationnels de sa filiale de 50%.

Dans cet article, j'ai trouvé le lien vers un article plus ancien, qui date du 27 juin 2024 : Iliad met en vente 49% de ses data centers pour réduire sa dette.

Iliad espère recevoir les premières offres indicatives des candidats d’ici au 31 juillet, précise le quotidien d’enquête sur la politique. Sur les 15 data centers que possède OPCORE en France et en Pologne, 14 seraient concernés par cette ouverture de capital. Cette information confirme les révélations de L’informé en janvier 2024.

-- from

Journal du samedi 14 septembre 2024 à 20:04 #WebDev

Dans le cadre du projet gibbon-replay, j'ai étudié sendBeacon pour traiter l'erreur NS_BINDING_ABORTED

qui a lieu ici lors de l'exécution de fetch lors d'événements beforeunload :

window.addEventListener('beforeunload', save);

C'est-à-dire, quand l'utilisateur quitte la page.

Dans ce commit, j'ai remplacé fetch par navigator.sendBeacon.

Journal du samedi 14 septembre 2024 à 18:18 #JaiDécouvert

#JaiDécouvert https://meet.hn, je me suis inscrit, mais je ne suis pas encore présent sur la carte.

Journal du vendredi 13 septembre 2024 à 10:23 #pnpm, #workspace, #docker, #WebDev, #DevOps

Après une mise en pratique plus approfondie, la technique présentée dans pnpm workspace et Docker build n'a pas fonctionné comme je l'attendais.

À cause de cette ligne du /demosite/pnpm-lock.yaml :

    dependencies:
      gibbon-replay-js:
        specifier: 0.2.0
        version: link:../packages/gibbon-replay-js

Pour générer un fichier pnpm-lock.yaml qui contient :

      gibbon-replay-js:
        specifier: 0.2.0
        version: 0.2.0

j'ai créé un script nommé demosite/scripts/generate-local-pnpm-lock-file.sh qui contient :

#!/usr/bin/env bash
# This script generates a pnpm-lock.yaml file in the local directory,
# without including dependencies from workspace projects.
# For example, the version of gibbon-replay-js installed is the version
# published on npmjs.
# This point is crucial to ensure the correct operation of the docker build
# command when creating the Docker image of the demo-site project.
set -e

cd "$(dirname "$0")/../"

export npm_config_link_workspace_packages=false
export npm_config_prefer_workspace_packages=false
export npm_config_shared_workspace_lockfile=false

pnpm install --lockfile-only

Cela me permet de générer un fichier pnpm-lock.yaml qui sera présent dans le dossier /demosite/ et utilisé lors de l'exécution de Docker build.

En complément de cela, j'utilise les paramètres suivants dans /demosite/.npmrc :

link-workspace-packages=true
prefer-workspace-packages=true
shared-workspace-lockfile=true

cela permet en phase de "développement", c'est-à-dire en dehors du build Docker, d'utiliser le fichier pnpm-lock.yaml à la racine et la version locale du package packages/gibbon-replay-js.

Tout cela me paraît un peu complexe, mais pour l'instant, je n'ai pas trouvé de méthode alternative permettant de configurer un environnement de développement répondant à ces deux exigences :

  • En mode développement, utiliser directement le code du packages/gibbon-replay-js sans qu'aucune action ne soit requise de la part du développeur.
  • Pouvoir générer l'image Docker en une seule commande.

Je suis ouvert à toute suggestion 🙂 (contact@stephane-klein.info).

pnpm workspace et Docker build #pnpm, #docker, #WebDev, #workspace, #DevOps

J'écris cette note pour me souvenir pourquoi j'ai paramétré .npmrc avec les options suivantes :

link-workspace-packages=true
prefer-workspace-packages=true
shared-workspace-lockfile=false

Sans l'option link-workspace-packages=true, je devais configurer package.json comme ceci

"gibbon-replay-js": "workspace:*"

pour que /demosite utilise le package local /packages/gibbon-replay-js.

Cette contrainte me posait un problème, parce que /demosite/Dockerfile ne pouvait pas être buildé.

L'option link-workspace-packages=true permet de configurer la dépendance suivante

"gibbon-replay-js": "0.2.0"

qui pourra être installé correctement lors du build de l'image Docker.

Attention, cette version de gibbon-replay-js doit avoir préalablement été publiée sur npm registry.

Seconde option qui m'a été utile : shared-workspace-lockfile=false.

Avec cette option, pnpm install génère les fichiers /demosite/pnpm-lock.yaml et /app/pnpm-lock.yaml, fichiers indispensables pour build les images Docker.

Journal du jeudi 12 septembre 2024 à 19:14 #docker, #pnpm, #WebDev, #JaiDécouvert

#JaiDécouvert cet article pnpm "Working with Docker".

J'y ai découvert corepack.

Pour le moment, je ne comprends pas l'avantage d'utiliser :

FROM node:20-slim AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable

plutôt que :

FROM node:20-slim AS base
RUN npm install -g pnpm@9.10

🤔

Dans ce Dockerfile j'ai tout de même utilisé cette technique pour tester.

J'ai utilisé le système de cache store de pnpm :

RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile

Je me suis posé la question de partage le cache de ma workstation :

$ pnpm store path
/home/stephane/.local/share/pnpm/store/v3

Mais je ne pense pas que cela soit une bonne idée dans le cas où cette image est buildé par une CI.

Journal du mercredi 11 septembre 2024 à 11:14 #projet, #javascript, #playground, #JeMeDemande

Dans la branche gibbon-replay-js du projet Idée d'un outil de session recoding web minimaliste basé sur rrweb, j'ai essayé sans succès d'extraire du code dans un package Javascript.

Pour le moment l'import suivant ne fonctionne pas :

import gibbonReplayJs from 'gibbon-replay-js';

Quand je lance pnpm run build, j'ai l'erreur suivante :

$ pnpm run build
...
x Build failed in 336ms
error during build:
src/routes/(record)/+layout.svelte (2:11): "default" is not exported by "packages/gibbon-replay-js/dist/index.js", imported by "src/routes/(record)/+layout.svelte".
file: /home/stephane/git/github.com/stephane-klein/gibbon-replay-poc/src/routes/(record)/+layout.svelte:2:11

1: <script>
2:     import gibbonReplayJs from 'gibbon-replay-js';

Et quand je lance pnpm run dev, j'ai l'erreur suivante :

$ pnpm run dev

...

11:21:21 [vite] Error when evaluating SSR module /packages/gibbon-replay-js/dist/index.js:
|- ReferenceError: exports is not defined
    at eval (/home/stephane/git/github.com/stephane-klein/gibbon-replay-poc/packages/gibbon-replay-js/dist/index.js:5:23)
    at instantiateModule (file:///home/stephane/git/github.com/stephane-klein/gibbon-replay-poc/node_modules/.pnpm/vite@5.4.3/node_modules/vite/dist/node/chunks/dep-BaOMuo4I.js:52904:11)

11:21:21 [vite] Error when evaluating SSR module /src/routes/(record)/+layout.svelte:
|- ReferenceError: exports is not defined
    at eval (/home/stephane/git/github.com/stephane-klein/gibbon-replay-poc/packages/gibbon-replay-js/dist/index.js:5:23)
    at instantiateModule (file:///home/stephane/git/github.com/stephane-klein/gibbon-replay-poc/node_modules/.pnpm/vite@5.4.3/node_modules/vite/dist/node/chunks/dep-BaOMuo4I.js:52904:11)

Suite à cette frustration, j'ai envie de créer un projet, sans doute nommé javascript-package-playground dans lequel je souhaite étudier les sujets suivants :

  • mise en place d'une librairie /packages/lib1/ qui contient une librairie javascript, qui peut être importé avec la méthode ECMAScript Modules ;
  • mise en place d'une app NodeJS dans /services/app1_nodejs/ qui utilise lib1 ;
  • mise en place d'une app SvelteKit dans /services/app2_sveltekit/ qui utilise lib1 dans un fichier coté server et dans une page web coté browser ;
  • mise en place d'une librairie /packages/lib2 qui utilise lib1

Je souhaite décliner ces 2 libs et 2 apps sous plusieurs déclinaisons d'implémentation :

Et le tout encore dans deux déclinaisons : Javascript et TypeScript.

Je ne souhaite pas supporter CommonJS qui est sur le déclin, remplacé par ECMAScript Modules.

Dans ce playground, je souhaite aussi me perfectionner dans l'usage de pnpm link et pnpm workspace.

#JeMeDemande si ces connaissances sont totalement maitrisées et évidentes chez mes amis développeurs Javascript 🤔 et s'ils les considèrent comme "basiques".

Journal du mercredi 11 septembre 2024 à 09:28 #YAML, #markdown, #json, #JaiDécouvert

#JaiDécouvert NestedText (from).

Même en lisant la section Alternatives - YAML, je ne comprends pas encore précisément l'intérêt du projet. Je ne trouve pas YAML plus simple que NestedText.

Journal du mardi 10 septembre 2024 à 17:55 #OnMaPartagé, #selfhosting

Un ami m'a partagé Reclaim-the-Stack. J'aime bien l'initiative, mais pour mes besoins spécifiques, qui sont bien plus modestes, je préfère opter pour une solution plus minimaliste, comme Kamal.

Journal du mardi 10 septembre 2024 à 17:51 #WebDev, #JaiLu

#JaiLu l'article de DHH : Design for the web without Figma.

This is perhaps the biggest, open secret to the productivity and viability of our two-person teams at 37signals. All our web designers work directly with the native materials of HTML, CSS, and usually even a fair bit of JavaScript and Ruby. The design process and its iterations flow through updates to the real code that runs the real app, and, as quickly as possible, against real data.

Voici encore une pratique à contre-courant de DHH, que je suis moi aussi depuis des années.

Journal du mardi 10 septembre 2024 à 17:24 #JaiDécouvert, #SaaS

J'avais bien vu passer la news de sortie de Writebook, mais j'étais passé totalement à côté de la sortie du concept de Once.com de Basecamp.

Pour le moment, Once.com propose deux services de type SaaS without the aaS :

J'aime bien le concept de Finished software, cela me fait penser à Hare. J'aimerais utiliser davantage de logiciels qui ne nécessitent jamais de mises à jour, sauf pour les corrections de bugs.

Dans l'article Campfire is SaaS without the aaS, je lis :

It hasn’t even been a week since we started selling Campfire under the new ONCE model, but we’ve already sold more than quarter of a million dollars worth of this beautifully simple installable chat system.

Si c’est exact, 250 000 $ représentent 836 ventes, ce qui est vraiment impressionnant en moins d'une semaine !

Ce que j'apprécie particulièrement chez DHH, c'est son franc-parler et surtout son courage à aller à contre-courant. Par exemple, il défend le self-hosting, n’utilise pas TypeScript, et prône le SaaS without the aaS...

Journal du mardi 10 septembre 2024 à 17:10 #JaiLu

#JaiLu l'article de DHH : Merchants of complexity.

Je vous encourage à lire cet article, car il exprime une opinion que je partage depuis de nombreuses années.

J'aime bien l'expression merchants of complexity.

Cela rejoint ma doctrine qui consiste à enlever des couches, réduire la complexité, suivre le principe Keep it simple, stupid!, éviter le Cargo cult programming !

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.

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.

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.

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.

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

🙂

[ << Page précédente (550) ] | [ Page suivante (3126) >> ]