Articles sur Blog

Les 2 outils essentiels pour réparer Windows

Il est fort probable que vous n’avez pas connu cette lointaine époque, cette ère de Windows 98 et Windows XP dans la fin des années 90 et le début des années 2000, les systèmes d’exploitation de l’époque étaient très instables. Je me souviens qu’avec Windows 98 il me fallait réinstaller le système à peu près tous les uns ou deux mois, surtout si vous avez beaucoup d’applications à tester et à installer. C’était justement à cette époque qu’en contrepartie Linux à forger sa réputation d’être un système stable. De nos jours avec Windows 10 et 11, ça a totalement changé, le système est devenu beaucoup plus stable, et le totalement réinstaller est devenu une opération rare. Néanmoins il y aura toujours des problèmes occasionnellement par ici et par là pour lesquelles Microsoft a fourni d’excellents outils pour contrer les problèmes disons non fatales. 

Réparer Microsoft Windows

Les 2 outils en question sont sfc et DISM. Ce ne sont pas des outils identiques mais Ils servent pratiquement tous les 2 le même but, réparer l’image du système d’exploitation. Le premier, sfc, va scanner les fichiers systèmes à la recherche de fichiers corrompus et les remplacer par de nouveaux fichiers tout neuf. Le deuxième, DISM est un logiciel de déploiement, ça veut dire il est généralement utilisé pour installer Windows sur plusieurs machines, ainsi dans le cas d’un système corrompu il peut aussi remplacer les parties défectueuses. La vidéo en haut explique très bien comment peut-on récupérer son système sans avoir à le réinstaller à partir de zéro. Les 2 commandes sfc et DISM dans leurs intégralités doivent être écrites comme suite (à écrire dans l’invite de commande) : 

  1. sfc /scannow
  2. DISM /Online /Cleanup-Image /RestoreHealth

Il existe aussi d’autres logicielles tierces, qui ne sont pas de Microsoft, pour faire à peu près la même chose, comme par exemple Windows Repair Toolbox, System Mechanic Ultimate Defense, ou Ashampoo WinOptimizer. Ils permettent globalement de réparer Windows avec en plus des fonctionnalités de maintien, de nettoyage, de protection, de sauvegarde…etc. 

Collection GitHub de ressources et de cours en informatique

L’un de mes étudiants m’a envoyé un lien d’un dépôt GitHub contenant une très grande collection de ressources sous format vidéo, de cours, de tutoriels, ou de conférences…etc., répertoriés et organisé en plusieurs catégories. J’ai un peu parcouru la liste de ces vidéos et j’ai remarqué que ce dépôt GitHub met en catalogue des cours provenant d’universités parmi les meilleurs mondes.

La liste des catégories ou des domaines que le dépôt recense et comme suite :

Analyse hardware de la Gameboy

Ça m’a toujours fasciné le sentiment de comprendre des machines que j’ai personnellement utilisées quand j’étais plus petit, animé par cette curiosité que j’avais à l’époque pour comprendre comment ça fonctionnait mais stoppé par le manque de connaissances pour le faire. On n’est pas encore au point de comprendre à 100% comment les anciennes machines fonctionnent, mais disons qu’une grande partie du hardware de ces anciennes machines a été révélé. Et ça principalement grâce à de nombreux hackers qui ont réussi à faire un énorme travail de reverse engineering réussissant à explorer ces machines qui sont de pour des raisons de secret industriel souvent était toujours fermées.

Le hardware de la Nintendo Gameboy

Sur la vidéo en haut on peut voir Michael Steil (voici son blog), l’un des hackers qui ont beaucoup contribué au reverse engineering et à la documentation de nombreuses machines. Et dans cette vidéo il fait une intervention lors d’une conférence organisée par le Chaos Computer Club, la plus grande association de hackers en Europe.

Il est vrai que cette vidéo est relativement technique, il devient difficile pour un étudiant dans les premières années universitaires, ou même pour un informaticien n’ayant pas d’expérience de dans le domaine de suivre et de comprendre toute la vidéo. Mais le plus important est d’avoir un aperçu global sur l’architecture d’un matériel réel, et d’essayer d’assimiler les concepts utilisés et les mots clés du domaine, assimiler entre 20 et 30% de la vidéo c’est déjà pas mal. Delà on peut facilement constater le grand écart entre ce qui se fait en université dans les modules de la conception hardware et les architectures matérielles réelles qui de loin sont beaucoup plus complexes. 

La complexité d’un algorithme

Pour concevoir des logiciels bien optimisés, il est souvent nécessaire de pouvoir distinguer les algorithmes optimaux des algorithmes trop gourmands en ressources. D’où l’entrée en jeu de l’étude de la complexité d’un algorithme, qui devient primordiale pour reconnaître son optimalité dans le monde réel. En d’autres mots, ça permet de prédire le comportement d’un algorithme avec un nombre très élevé de données.

Pour avoir une compréhension de c’est quoi la complexité d’un algorithme, appelez aussi le grand-O (Big-O en anglais), on va imaginer un exemple simple, supposons qu’un algorithme nécessite une seconde pour calculer 10 données, sa complexité est monotone (O(n)) s’il lui faudrait 10 secondes pour finir 100 données. Par contre si c’est un algorithme optimal il lui faudrait moins de temps. Ou inversement si c’est un algorithme gourmand il lui faudrait plus. La complexité permet plus ou moins de prédire ce temps. 

Notion du Big-O (par www.geeksforgeeks.org)

À vrai dire, l’étude de la complexité est une méthode mathématique relativement difficile à appréhender à première vue. La principale raison est que cette méthode ne ressemble à aucun domaine mathématique vu auparavant dans le cursus de l’étudiant. On peut grossièrement la qualifier comme un point d’intersection entre le calcul arithmétique et le calcul des limites dans l’analyse mathématique. D’une part, malgré que le but de la méthode soit le calcul du temps nécessaire pour l’exécution en rapport avec les données exercées sur l’algorithme, elle ne va pas faire un calcul arithmétique exacte de ce temps comme on avait vu sur l’exemple, mais elle va plutôt nous fournir une approximation. Et d’autre part la méthode tend à évaluer le temps pour un nombre très grand de données, et s’appuyer sur des procédés mathématiques qui sont similaires au calcul des limites, comme par exemple négliger les fonctions les moins rapides (comme par exemple : 2X2 + 4X +1 tend vers X2). Mais en même temps, ce n’est pas un calcul de limite. La complexité va réellement nous retourner une fonction parmi les fonctions illustrées sur le graphe en haut. Cette fonction va nous donner une estimation de la rapidité en complexité de l’algorithme en rapport avec le nombre de données. La vidéo en bas de la chaîne YouTube du site web éducatif www.freecodecamp.org illustre cette notion de complexité sous format d’un cours de courte durée pour appréhender plus ou moins cette notion du Big-O. 

Cours sur la complexité d’algorithme

La théorie des graphes en informatique

Pour dire vrai, la vie d’un informaticien se résume en grande partie au processus sans cesse de résolution de problèmes. Des problèmes de type de pratique, technique, qui concerne généralement la technologie. Trop souvent les outils mathématiques formels et précis sont souvent utilisés dans ce processus de résolution. Dans cet article on va parler d’un modèle mathématique très connus par les informaticiens, à savoir les graphes. Les graphes appartiennent aux mathématiques dites discrètes. On peut les définir d’une manière simpliste comme un ensemble de sommets ou de nœuds, interreliés par des liens souvent appelés arêtes. Avec ce modèle simple on peut modéliser énormément de systèmes réels, comme par exemple les réseaux routiers, les réseaux informatiques, les groupes d’amis dans les réseaux sociaux…etc. Le principal avantage de la modélisation avec les graphes c’est qu’ils possèdent énormément de théorème, de postulat, et de formule que l’informaticien peut exploiter pour améliorer, corriger, ou vérifier son système. Par exemple l’un des plus célèbres théorèmes sur les graphes est le théorème de coloration. C’est un théorème ancien de 2 siècles qui stipule que quel que soit un graphe, il suffit de 4 couleurs pour colorier tous les nœuds du graphe avec une couleur différente pour chaque pair de nœuds voisins. Ce théorème a été récemment prouvé mathématiquement correct, et il est très utilisé en cartographie comme preuve qu’on peut colorier tous les états sur une carte géographique avec seulement 4 couleurs avec des couleurs différentes pour tous les états voisins.

Théorie des graphes

La vidéo haut est celle de la chaîne YouTube Zach Star, c’est une très bonne chaîne que je conseille aux étudiants. La vidéo n’est pas spécifique aux graphes en particulier mais elle en traite quand même une bonne partie. C’est une vidéo qui traite en général le raisonnement mathématique utiliser en informatique. 

Le bus PCI Express

L’autre jour je voulais installer un disque dur SSD pour un peu augmenter les performances de mon PC de maison. Lorsque j’ai commencé à chercher les différents modèles SSD sur Internet j’ai constaté qu’il existait 3 différents types de disque dur, les disques durs SSD utilisant le bus SATA, le connecteur des anciens disques durs magnétiques HDD, les SSD utilisant le M.2 NVMe, et surtout ce que je ne connaissais pas avant, c’est les SSD se branchant directement sur le port PCI Express. C’est vrai que le bus PCI Express et pratiquement le principal bus d’extension pour les cartes-mères des PC modernes. Je me rappelle très bien de l’évolution de ce bus, parce que ça a été toujours le seul moyen de rajouter des cartes d’extension aux PC, comme les cartes graphiques, les cartes réseau, les cartes son, les cartes TV, les cartes d’acquisition…etc. Les cartes-mères avant l’apparition du PCI Express utilisaient son grand frère le bus PCI qui avait exactement la même fonction et la même utilisation, mais contrairement aux cartes-mères modernes ces cartes-mères disposaient d’un port différent et spécifique que pour les cartes graphiques, appelé le port AGP. Et en revenant encore plus avant dans l’histoire de l’informatique, avant le port PCI il y avait son ancêtre le port ISA, que personnellement j’ai connu sur ma première carte-mère, mais que je n’ai jamais eu le besoin de l’utiliser.

Introduction à PCI Express

Malgré que le bus PCI Express soit conçu principalement pour être facile à utiliser, mais aussi conçu pour être versatile pour s’adapter à tout type varié de cartes d’extension à rajouter la carte-mère. C’est pour cette raison qu’il n’est pas si simple à utiliser, ou plutôt il est préférable de connaître ses différentes variantes pour ne pas se tromper dans son utilisation, et de bien comprendre son utilisation. La vidéo en haut est une excellente démonstration qui englobe tous les cas d’utilisation de ce port qui est de nos jours indispensable pour nos PC.

La commande réseau Ping

Le réseau informatique fait désormais partie intégrante de notre vie quotidienne, qu’il soit utilisé avec PC, tablette, téléviseur, téléphone portable, console de jeux …etc. Parce qu’on a besoin que tous ces appareils soient connectés à internet. Malheureusement notre réseau informatique à domicile ou au travail n’est pas totalement protégé des pannes et de mal fonctionnement. La détection des erreurs dans les réseaux informatiques n’est pas une tâche aisée, dans la majorité des cas il faut effectuer plusieurs tests, et mener une sorte d’enquête en appliquant la déduction pour essayer de connaître la source exacte de l’erreur. Pour effectuer les tests sur les réseaux usuellement vous aurez à utiliser 2 types d’outils ; les outils matériels comme par exemple les testeurs câbles réseau, ou le Time Domain Reflectometer (dont on a déjà parlé dans cet article). Ou les outils logiciels, il y en a beaucoup, comme par exemple, ping, traceroute, ipconfig (ou ifconfig sur linux), nslookup, netstat. Dans la vidéo en bas de la chaîne PowerCert Animated Videos on va se concentrer sur le plus simple mais le premier à utiliser, c’est la commande Ping. Elle est très simple à utiliser et surtout très efficace pour trouver la source d’erreurs. 

La commande Ping

Comprendre le fonctionnement de son propre PC

Pour un informaticien il est important de comprendre ce qui se trouve dans les entrailles de sa machine. Et le sens du terme comprendre va au-delà de reconnaitre les principaux composants d’un PC, comme par exemple le processeur, la carte-mère, la carte graphique…etc. Mais plus spécifiquement de voir à l’intérieur comment ces composants fonctionnent. Il faut savoir que sur les 20 dernières années, l’architecture des PC a énormément évolué. Comme par exemple la disparition avec le temps du chipset Northbridge et son intégration à l’intérieur des processeurs. Ou aussi l’intégration des cartes graphiques à l’intérieur des processeurs. L’apparition du multicœur qui est devenu maintenant la norme des processeurs. L’apparition du cashe de niveau 3 commun pour tous les cœurs d’un processeur. Les nouvelles technologies de bus comme le PCI-express, l’USB 3, ou le NVMe pour les disques durs SSD…etc.

Architecture d’un PC

La vidéo en haut de la chaîne YouTube Computer Science Lessons, donne une explication relativement approfondie de la composition interne d’un PC. Personnellement je trouve que c’est important de comprendre comment se comporte notre PC et de pouvoir comprendre et suivre l’état des différents composants en suivant leurs profile par un logiciel comme CPU-Z par exemple.

Motifs géométriques de l’architecture islamique

Concernant notre culture arabo-musulmane, on peut dire que nos ancêtres avaient vraiment excellé dans deux domaines artistiques particuliers, qui sont les motifs géométriques utilisés dans la décoration architecturale, et l’art de la calligraphie arabe. Ça m’a toujours fasciné de connaître comment ces motifs géométriques qui semblent à première vue complexes, étaient façonnés. La chaîne Youtube de TEDEd donne quelques techniques basiques utilisées géométriquement pour créer ces motifs. Le procédé est assez simple mais le résultat est majestueux. La première pensée qui m’est venu après avoir vu cette vidéo était de créer un petit programme qui peut générer automatiquement avec peu de configuration ce genre de motif. Ça doit probablement exister, mais personnellement je n’ai jamais croisé un programme qui peut réaliser cette tâche. À mon sens ça présage un fort potentiel et des possibilités infinies. Ça pourrait même faire le sujet d’un projet pour étudiants, avec probablement la bibliothèque graphique C++ RayLib.

Géométrie des motifs islamiques

Le concept de la mémoire virtuelle

Personnellement je suis un enseignant en architecture des ordinateurs, et j’essaye de parler le moins possible dans mes cours de la mémoire virtuelle. Pourquoi ? parce que ça va rajouter un degré de confusion pour la compréhension du fonctionnement de la mémoire pour les étudiants. Malgré ça dans le cas pratique, la mémoire virtuelle est quasiment implémentée dans toutes les machines modernes. Elle se peut qu’elle soit quad même absente dans les systèmes simplistes comme les microcontrôleurs et quelques systèmes embarqués. En tout cas il est très simple de reconnaître si un possesseur utilise la mémoire virtuelle ou non, il suffit de chercher s’il dispose d’un MMU, car c’est le composant en charge de cette technologie.

La mémoire virtuelle

La vidéo en haut de la chaîne YouTube Computerphile expose très bien le concept de la ma mémoire virtuelle, malgré cela j’aimerais juste rajouter quelques observations personnelles. Comme par exemple le mécanisme de la mémoire virtuelle semble a priori apporter de la complexité superflue à la machine, mais en réalité il est très pratique. Car premièrement d’un point de vue technique, il est très simple à implémenter. Et deuxièmement, ça permet d’incorporer beaucoup d’autres mécanismes. Comme par exemple la protection de la mémoire, lorsqu’un programme est limité à son espace et ne peut pas accéder aux données d’un autre programme. Ou encore l’utilisation du swapping ou pagination avec le disque dur, utilisés principalement lorsque la RAM n’a pas d’espace suffisant pour contenir toutes les données d’un programme, ainsi le disque dur prend le rôle d’un approvisionneur de mémoire.

Un dernier point technique concernant l’utilisation de la mémoire virtuelle, c’est que cette dernière est réalisée par un composant interne au processeur appelez le MMU (Memory Management Unit). Dans l’utilisation réelle, le système d’exploitation sollicite le MMU pour gérer la mémoire virtuelle. Il important aussi de savoir que le MMU utilise une partie de la RAM pour sauvegarder ses tables de transition, en ayant en plus une minuscule mémoire cashe dans le processeur s’appelant TLB (Translation Lookaside Buffer), lui permettant d’accélérer les opérations de transition. Bien sûr j’aimerais rappeler que cette mémoire cashe est totalement différente du cache principal du processeur, lui aussi géré par le MMU.