Advanced Search
Search Results
284 total results found
📝 Utiliser Docker Compose
version: '3' # On peut définir plusieurs conteneurs d'un seul coup en utilisant docker-compose # Et si on modifie ce fichier, cela va supprimer les anciens docker pour les mettre à jour services: db: # On défini l'image # Sinon on peut aussi utilise...
🔌 Réseau, reverse proxy avec Traefik
Maintenant, quand on veut pouvoir avoir plusieurs services sur un même port avec des noms de domaines différents. On doit utiliser un reverse-proxy, on peut par exemple utiliser nginx mais ce n'est pas pratique car cela sort de l'écosystème Docker. Donc à la p...
👀 Visualiser tout avec Portainer
Portainer est un super outil pour avoir une interface web pour gérer tout à propos de Docker : images, stacks (docker-compose), conteneurs, volumes, réseaux, etc. On va utiliser traefik comme reverse proxy avec portainer. Sauf que si on met les deux dans le mê...
🗃️ Archiver un site et des images
Voici comment j'ai fait pour faire un backup complet de mon site avec Docker. Ce site était un site Bookstack qui était donc composé de Bookstack, de dépendences PHP ainsi que d'une base de donnée mariadb. Malheureusement je ne peux pas simplement migrer le si...
Introduction
Rust a commencé comme projet personnel de Graydon Hoare en 2006, un employé chez Mozilla, Mozilla va ensuite sponsoriser ce projet et compte l'utiliser pour programmer un futur moteur de navigation prévu pour être plus rapide que Gecko (utilisé pour Firefox). ...
Installation et Hello World
Pour commencer notre découverte de Rust on va d'abord devoir installer rustup. On peut l'installer via des gestionaire de paquets (chocolatey sous Windows, brew sous mac, ou apt sous debian par exemple). Sinon les instructions pour l'installer sont disponibles...
Variables et types primitifs (et cast)
En rust les variables sont définie avec let et sont immuable par défault // Cette variable est immuable let x = 42; // Cette variable est muable (peut être modifiée) let mut y = 42; // On peut préciser un type avec : // Préciser les différents types n'est pa...
Strings et affichage formatté
On a vu dans le chapitre sur les types primitifs que l'on peut faire des chaines de caractères avec &str, mais ici on va voir la version plus évoluée avec String Ce type plus complexe a beaucoup de méthodes et de possibilités. D'abord voyons comment le créer :...
Ownership, lifetimes et références
Maintenant il faut s'attaquer à quelque chose de très important dans Rust : la manière dont laquelle la mémoire est gérée. Les types de mémoire Pour comprendre tout ceci, il faut d'abord que l'on s'attaque aux types de mémoire: le stack et le heap Le stack (...
Vecteurs et HashMap
Vecteurs Les vecteurs sont des listes à taille variable fn main() { // Je peux créer un vecteur mutable (qui peut être modifié) comme ceci : let mut ma_liste = vec![1,2,3,4,5,6,7,8,9]; println!("Ma liste est {:?}", ma_liste); // Je peux ensuite ajouter d...
Enums et gestion d'erreurs (Result et Option)
Rust exige toujours de gérer les cas où il y aurait une erreur d'une manière ou d'une autre. Toute commmande qui pourrait donner une erreur rendera un type Result<> et toute commande qui pourrait ne donner rien retournera un type Option<>. Il y a plusieurs man...
Les fonctions (méthodes et closures)
La différence entre une méthode et une fonction sera évoquée au chapitre sur les implémentations Définition d'une fonction fn ma_super_fonction() { // Cette fonction ne retourne rien println!("Hello World"); } fn addition(a: i32, b: i32) -> i32 { // Cett...
Structures, implémentations et traits
No Boilerplate → 🛰️ Building a space station in Rust (Simple Rust patterns 📚) [RUST-8] Structure Un struct ou structure est un type de donnée personnalisé qui permet de rassembler plusieurs propriétés. (C'est un peu comme un "objet" dans la POO) // Création ...
Histoire de l'informatique
Dès le début de l'humanité, nous avons commencé à compter. D'abord on a compté en base 1 (base unitaire). Par exemple, 1 mouton = 1 caillou (d'où calculus qui donne le mot calcul en français) Un nombre est une quantité que l'on veut représenter, tandis qu'un ...
Deux millénaires de progrès
Vers 500av JC, nous avons commencé à compter avec des bouliers, des tables à compter et des bâtons de Neper Fonctionnement d'un bâton de Napier 1614: John Neper invente la théorie des logarithmes. Grace aux logarithme il est possible de remplacer la multip...
Les tubes à vide (1945-1955)
En 1943, le premier ordinateur digital "COLLOSUS" mais est un secret militaire. En 1945, l'ENIAC est créé. Voir l'article Wikipedia pour se rendre compte à quel point l'ENIAC est énorme. Wikipedia - ENIAC En 1945, John von Neumann propose une évolution de ...
Les transistors (1955-1965)
Après les tubes à vide, il y eu les transistors. Beaucoup plus rapide, plus fiable et moins cher que les tubes. C'est aussi à cette période que des languages plus évolués comme le FORTTRAN et le COBOL apparaissent. Ainsi que des composants comme des imprimante...
Les circuits intégrés (1965-1970)
Les circuits intégrés sont essentiellement de très petits trasnsitors dans une petite boite. Encore une fois: moins cher, plus fiable et plus rapide En 1958, le premier circuit imprimé par Texas Instruments En 1964, première gamme d'ordinateurs par IBM qui soi...
Microprocesseurs (1970-???)
Toujours pareil, plus petit, moins cher, plus performant et plus fiable. En 1971, premier microprocesseur (ayant une puissance similaire à l'ENIAC) En 1973, création du language C pour le développement de UNIX En 1978, création de la famille de processeur x86 ...
L'évolution des performances
A partir des années 70s, avec l'intégration toujours plus poussée des composants sur une puce et l'augmentation de la capacité de calcul En 1965 Gordon Moore, constate que depuis 1959, la complexité des circuits intégrés à base de transistors double tous les a...