Monthly Shaarli
November, 2022
Ce genre de bonne nouvelle c'est rare et ça fait plaisir!
Les données des apprenants et des professeurs ne seront pas la propriété des GAFAM :D
Un outil pour scanner automatiquement un cluster Kubernetes et détecter les failles de sécurité.
- nodes sans TLS
- recherche de CVE
- politiques réseaux
Ça peut se lancer en commande standalone mais aussi être intégré dans un CI et même dans VSCode!
(Via Florian)
Une solution de Seedbox / Media Center Open Source pour se faciliter la vie.
Ça s'installe très facilement et donne accès à des interfaces pour installer de nouvelles applications:
- ruTorrent & co
- NextCloud
- OpenVPN
- Subsonic
- and more!
C'est parfait quand on a un Kimsufi (~12€/mois) et qu'on veut se faire son petit coin d'internet avec tout ce qu'il faut ;-)
(Via Esteban)
Un retour de Buffer sur la semaine de 4 jours.
Buffer est une des boites "à la pointe" du bien être au travail et des méthodes de travail async/remote.
Ils ont mis ça en place petit à petit avec un essai sur 1 mois puis sur 6 mois.
Au final il n'y a pas eu de baisse de productivité manifeste mais par contre les employés se sentent beaucoup mieux.
Une vidéo sur l'attaque qu'à subit Google en 2009 et qui venait apparement du gouvernement Chinois dans le but de récupérer les comptes Gmail d'activistes.
Pas beaucoup de détails techniques malheureusement.
Sinon à la fin ça fait un peu trop les gentils Google qui nous protègent des méchants espions venant d'autres gouvernements alors que le gouvernement US est en capacité de siphonner la totalité des données de Google.
Il est illégal d'utiliser les Google Fonts en Europe et ça a été confirmé par une décision de justice en Allemagne !
Rome est un outil pour Javascript/Typescript qui sert de linter, formatter, bundler et test runner.
En gros ça remplace Eslint, Prettier, Webpack, Babel et Jest.
C'est écrit en Rust et beaucoup plus performant que les outils JS.
L'autre avantage est de n'avoir qu'un outil binaire plutôt que des centaines de dépendances et des centaines de méga-octets dans le dossier node_modules.
(Via Ludo)
L'un des membre de l'équipe du ransomware LockBit aurait été arrêté par le Department of Justice, aux USA donc.
Il aurait entre autre été identifié via des transactions réalisées en Bitcoin.
LockBit est un Ransomware as a Service, c-a-d que les créateurs sont rémunérés lorsque d'autre pirates réussissent à soutirer des rançon en piratant des entreprises avec LockBit.
Une base de données pee-to-peer, c-a-d qui permet de communiquer avec d'autres clients pour se synchroniser sur l'état commun partagé.
ça m'a l'air plutôt compliqué à gérer, surtout avec des clients malicieux mais par contre le côté offline first est toujours bon à prendre :-)
(Merci Pierre pour le partage)
Des statistiques sur les attaques informatiques réalisées depuis plus de 20 ans.
On y voit l'évolution des types d'attaques mais aussi l'évolution du type de cible.
Une explication très clair du fonctionnement des executions asynchrones avec Node.js.
La plupart des opérations de type I/O (lire un fichier, faire une requête http, etc) sont réalisées en parallèle du reste du code dans une pool de thread gérée par la libuv.
Cela permet de ne pas bloquer le thread principal en attendant le retour d'une requête HTTP (qui est très long comparé à executer du code ou récupérer une donnée en RAM)
(Merci Ludo pour le partage)
Un site parodique de fausse excuses pour ne pas faire de la sécurité correctement :D
(Via Marc)
Un très bonne comparaison entre les performances de recherches d'Elasticsearch et MongoDB et le résultat est sans appels.
Sur la recherche, Elasticsearch est jusqu'à 20x plus rapide que MongoDB.
Sur les aggrégations, Elasticsearch est jusqu'à 38x plus rapide que MongoDB.
Sur l'insertion, MongoDB est 1.20x plus rapide que Elasticsearch.
Sur le parcours des données, Elasticsearch offre des performances stables quand MongoDB passe de 5 à 60 sec pour récupérer les derniers documents d'une collection.
Sur l'espace disque, MongoDB occupait 2x plus d'espace avec les mêmes données. (sans index!)
Ces benchmarks ont été effectués sur de grosses collections (dizaines de millions) mais les différences performances se font aussi sentir sur de plus petites collections.
Les performances seules ne doivent pas guider le choix mais aussi les features, par exemple les limitations d'Elasticsearch sont les suivantes:
- Near Realtime Search: les documents ne sont pas disponible immédiatement dans le search après écriture
- Pas de modification possible du type d'un champs d'une collection (int vers string par exemple)
- Pas de transactions
- Pas de pseudo-relationnel comme en MongoDB
Une super liste d'outils modernes (beaucoup en Rust) pour remplacer les bons vieux outils GNU.
Perso j'ai gardé:
lsdpour remplacerlscurliepour remplacercurlmicropour remplacernanobatpour remplacercat
Explications sur le modèle de données utilisé par Notion en interne.
Tout repose sur un système de blocs organisés en arbre hiérarchique ou chaque bloc possède un type qui va définir la manière dont il est affiché par l'interface web.
Côté optimisations de leurs applications clientes, les modifications sont faites d'abord dans une DB locale (SQLite ou IndexedDB) puis synchronisées sur les serveurs de Notion.
Vous avez envie de jouer avec Stable Diffusion mais vous n'avez pas de GPU?
J'ai fait un tutoriel pour utiliser Stable Diffusion UI sur les instance GPU Scaleway (0.8€/h)
Très bonne explication des différences entre Nested fields et Object fields pour stocker des tableaux d'objets avec Elasticsearch.
Si on souhaite faire des recherches sur plusieurs propriétés contenues dans ces tableaux, alors on devra utiliser le type nested car sinon ES "applatit" les champs.
{
"authors": [
{ "name": "Gustavo Llermaly", "age": "32", "country": "Chile" },
{ "name": "John Doe", "age": "20", "country": "USA" }
]
}
Sans préciser le type nested, cela sera indexé de cette manière:
{
"authors.name": ["Gustavo Llermaly", "John Doe"],
"authors.age": [32, 20],
"authors.country": ["Chile, USA"]
}Slack ont une utilisation intensive de Terraform (infrastructure as code)
Comme beaucoup de monde, ils stockent les state Terraform dans S3.
Je suis par contre surpris de voir Jenkins en CI!
Dans l'article ils parlent de leur gestion:
- des versions de Terraform
- des modules via un catalogue maison
- des tests
Un outil open source basé sur l'algorithme Demucs de Facebook pour isoler n'importe quelle partie d'un instrument de musique !
Génial pour s'entraîner sur ses morceaux préférés 😄
Un article qui explique pas à pas le fonctionnement d'une base de données relationnelle.
Il utilise l'algèbre relationnel pour décrire chaque opération.
Dans une DB relationnelle, chaque ligne peut-être considérée comme un vecteur à N dimensions (les dimensions sont les colonnes).
"Adrien", 29, "Minsk" est un vecteur à 3 dimension (nom, age, ville) qui représente une personne.
A partir du la on peut dérouler toutes les opérations comme la projection (SELECT), la selection (WHERE), le produit vectoriel (JOIN)
Une usurpation d'identité 100% online via un crack de mot de passe email et un changement d'opérateur téléphonique, ça fait peur!
Un document interne technique la manière d'optimiser la destructuration d'array qui est massivement utilisé dans les React Hook.
C'est intéressant de voir que la destructuration d'objets était plus légère et rapide que la destructuration d'array (64 bytes d'instructions vs 305).
La destructuration d'objet est même plus rapide que de faire:
const array = useState(),
count = array[0],
setCount = array[1];
Ces différences sont très légères et uniquement observées sur le bytecode non optimisé.
Il est possible d'utiliser le model DreamBooth qui permet de générer des images à partir de photo de soi directement depuis l'API de Replicate!
RESPONSE=$(curl -X POST -H "Authorization: Token $REPLICATE_API_TOKEN" https://dreambooth-api-experimental.replicate.com/v1/upload/data.zip)
curl -X PUT -H "Content-Type: application/zip" --upload-file data.zip "$(jq -r ".upload_url" <<< "$RESPONSE")"
SERVING_URL=$(jq -r ".serving_url" <<< $RESPONSE)Une histoire de dette technique sur un fond de migration d'architecture Kafka (😱)
Une remarque intéressante ici est que la dette technique s'est accumulée à cause du manque de mise à jour du cluster Kafka, par l'inaction donc.
Moralité: gardez vos framework et outils à jour
Un article d'investigation puis de correction de problèmes de performances sur un grosse application React utilisant les Hooks.
Une analyse technique du fonctionnement du malware Android Pegasus qui est utilisé par des organisations criminelles et certains gouvernements pour espionner des individus.
Un réseau anonymisant comme Tor mais qui va plus loin en
- mélangeant les paquets de tous le monde entre les noeuds
- ajoutant des délais pour lutter contre les timing attaque
- injectant du faux traffic
Surtout la grosse différence est la rétribution des nœuds via une cryptomonnaie. En gros on doit payer pour faire passer du traffic anonymisé et en échanges les nœuds sont rémunérés.
Un site qui permet d'avoir un fond avec effet Matrix :D
Le classique: https://rezmason.github.io/matrix/?width=50&fallSpeed=0.1
Version 3D: https://rezmason.github.io/matrix/?width=50&fallSpeed=0.1&version=3d
Une excellente explication du fonctionnement de Mastodon et des autres application fédérés comme PeerTube.
Contrairement à ce que raconte les ayatollah de la blockchain, le web 3.0 (et non pas web3) est bien dans ce genre d'alternatives et non dans la re-centralisation dans des blockchains et la monetisation de l'ensemble des transactions.
Happy Birthday, Go!
13 ans déjà, le langage est beaucoup plus mature aujourd'hui et même si il n'a pas pris la place du C comme langage pour la programmation système (c'est plutôt Rust qui est en passe de le faire), Golang reste un des langage majoritaire dans les outils d'infrastructure aujourd'hui.
Kubernetes, Terraform, Traefik et de nombreux autres outils très populaires son écrit en Golang.
Une feature intéressante que je ne connaissais pas, le fuzzing intégré au langage pour tester le comportement de son programme avec des milliers d'inputs aléatoires !
Ça devait arrivé, Copilot propose parfois en suggestion du code sous licence.
Ici un développeur s'en est rendu compte et Microsoft est attaqué en justic pour non respect des licences.
Un manifest qui va dans le sens du KISS (Keep It Simple, Stupid)
Mes préférés:
Synthesis is the key of communication. We have to write code for humans not machines.
Keep it plain. Try to keep your designs with few layers of indirection.
De bon conseils pour créer des types, notamment des union types pour être sur de manipuler des objets correctes.
Plutôt que de faire ça
type Event = {
name: 'CREATE' | 'DELETE';
id?: string;
content?: string;
}
Faites plutôt:
type EventCreate = {
name: 'CREATE';
content: string;
}
type EventDelete = {
name: 'DELETE';
id: string;
}
type Event = EventCreate | EventDelete;Une alternative au compilateur officiel TSC pour Typescript.
C'est beaucoup plus rapide (~100x plus rapide) car:
- écrit en C++
- écrit uniquement pour les versions récentes de TS
- cache des fichiers compilés
Il utilise un bytecode intermédiaire pour représenter le typescript et conserve un cache pour ne prendre en compte que les dernières modifications.
Par contre toutes les fonctionnalités ne sont pas supportées.
(Merci Sébastien pour le partage)