La programmation d’un émulateur

Étant actuellement un enseignant en architecture des ordinateurs, et un enseignant de programmation et structures de données dans le passé. Je peux sereinement suggérer aux étudiants en informatique, que le meilleur exercice pour maitriser les 2 disciplines est de développer soi-même un émulateur. Alors c’est quoi un émulateur ? L’émulateur par définition est un logiciel qui va reproduire ou répliquer exactement le même comportement d’une machine donnée sur une machine hôte différente. Vous pouvez par exemple émuler une console du type Nintendo sur un PC de bureau. L’émulateur va se comporter exactement comme une console Nintendo le ferait réellement. Vous aurez ainsi l’équivalent d’une console installé sur un PC et vous pourrez jouer à cette console. 

Le fait de programmer un émulateur est très enrichissant pour un étudiant. Ça va premièrement, le faire investir en programmation sur un projet relativement de grande envergure, à la différence des petits exercices et travaux pratiques qu’il a l’habitude de faire dans lequel il doit planifier au préalable et construire une architecture logicielle qu’il doit suivre et soutenir tout au long du projet. Et deuxièmement, il doit bien maîtriser l’architecture de la machine à émuler. Il doit effectivement reproduire en logiciel les composantes hardwares de la machine. Ainsi, il va reconstruire le processeur avec toutes ses instructions et ses caractéristiques, il doit aussi reproduire les mémoires de la machine, le système vidéo, le système de son, les entrées/sorties… etc. Sur la vidéo en bas de la chaîne YouTube Computerphile, un émulateur pour la célèbre machine Atari 2600 est grossièrement décrit par le docteur Steve Bagley.

L’émulateur de machines

Il faut savoir que les consoles de jeux sont principalement les émulateurs les plus connus parmi les émulateurs de toutes les machines. Pour la simple raison que ça va permettre aux utilisateurs de jouer à ces machines sur leurs propres ordinateurs. Malheureusement, ces consoles de jeux sont parmi les machines les plus dures à émuler, en raison de la complexité de leur système graphique. Cependant, pour un étudiant avec un bon niveau en programmation et en architecture des ordinateurs, Il lui est possible de développer des émulateurs jusqu’à la 4e génération des consoles de jeux, même si que pour faire tourner de simple démo ou homebrew, incluant ainsi des consoles comme la Nintendo NES, SNES, Sega Mega Drive, Master System…etc. Ce qu’on appelle les consoles à 16 bits. À partir de la 5e génération, ou les consoles dites 32 bits, ça devient difficile pour un simple étudiant de développer tout seul un émulateur pour une machine de ce type, en raison que ces machines sont devenues beaucoup plus puissantes que les précédentes, principalement à cause de l’intégration de la technologie 3D. On peut compter parmi ces consoles, la Sony Playstation 1, La Sega Saturn, La Nintendo 64. Jusqu’aux dernières générations de consoles. 

Brève introduction à l’électronique

Les bienfaits de l’électricité dans notre vie quotidienne sont énormes et innombrables. Pour beaucoup de monde l’électricité est l’invention la plus marquante pour l’être humain tout au long de son existence. Au tout début de son appréhension par l’humain, ça a été surtout utilisées comme un moyen de transmission d’énergie. Ça permettait, et ça permet jusqu’à nos jours, d’alimenter les systèmes d’éclairage et à être une source d’énergie pour les différents appareils et moteurs se trouvant dans les dispositifs électroménagers, comme les réfrigérateurs ou les machines à laver, ou même les moteurs se trouvant dans les usines et les ateliers d’industrie. Mais plus que ça, et c’est ça ce qui nous intéresse en informatique, l’électricité est utilisée comme un moyen de transmission de l’information. L’exemple le plus concret est sans doute l’internet. Mais aussi à l’intérieur de nos ordinateurs car l’information est transmise sous forme d’impulsion électrique en utilisant les différents circuits électroniques composant l’essentiel du hardware informatique. Et tout ça principalement pour sa simplicité d’utilisation, sa disponibilité, et sa rapidité de transmission. Peut-être un jour la lumière va remplacer l’électricité pour le traitement automatique de l’information, mais pour l’instant la lumière est suffisamment plus difficile à manier en comparaison à l’électricité.

Le courant électrique

La vidéo en haut est celle de la chaîne YouTube Engineering Mindset, est une simple introduction au courant électronique. Le contenu de cette chaîne est excellent pour comprendre comment fonctionnent les circuits électroniques, que normalement tout étudiant en informatique doit au moins maîtriser les bases de cette discipline d’ingénierie magnifique.

Les processeurs RISC vs CISC

Toute personne parcourant l’évolution historique des processeurs à travers le temps, serait sûrement appelée sur une période dans le début des années 80, concernant un débat dans la communauté scientifique et industrielle autour l’évolution des processeurs dans les années à venir. Il y avait pratiquement 2 camps, un camp qui pensait que les avancées en électronique permettraient de créer des processeurs plus évolués et plus capables et que les processeurs devraient être plus complexes et plus riches. Le 2-ième camp n’approuvait pas cette idée, et suggérait que les processeurs devraient rester plus simples, et que la complexité des applications doit être léguer au Software. Après plusieurs débats houleux, il s’est avéré que c’est le 2-ième camp malgré un nombre d’adhérents réduit et un raisonnement semblant contre intuitif, les années à la suite leur ont donné raison.

RISC vs CISC selon David Patterson

Ce 2-ième camp est principalement représenté par les 2 figures bien connu dans le domaine des architectures des ordinateurs, David Patterson et John L. Hennessy, ils sont actuellement désignés comme les parrains de l’architecture des ordinateurs. Ils sont très célèbres dans le domaine académique par leurs 2 livres références Computer Organization and Design et Computer Architecture: A Quantitative Approach. Ils ont eux aussi l’honneur d’avoir le prix équivalant au prix Nobel en informatique qui est le prix Turing en 2017. David Patterson se charge actuellement du développement du très prometteur nouveau processeur open source RISC-V, et John L. Hennessy est bien connu pour être le cofondateur du célèbre processeur MIPS. Sur la vidéo en haut, on a une partie de l’interview de David Patterson par le célèbre académicien Lex Fridman, sur laquelle David Patterson va relater les faits et les événements qui se sont déroulés à cette époque. 

Le moteur de jeu Godot 4.0

Pour un programmeur en quête de créer des jeux vidéo, Il aura à choisir entre plusieurs solutions. La première, est l’utilisation des bibliothèques bas niveau, ou les API, comme par exemple OpenGL, DirectX, ou Vulkan. Malgré que l’utilisation de ces bibliothèques offre une puissance énorme pour le jeu, ils restent rarement utilisés pour ce cas car ils sont très difficiles à utiliser. C’est comme l’assembleur, c’est un langage bas niveau très puissant, mais trop difficile pour être utilisé dans la programmation quotidienne. Ils sont généralement réservés pour des applications plus spécifiques, ou la création de plateformes graphiques ou les moteurs de jeux vidéo.

Le 2-ième choix est les frameworks ou les plateformes. Ils sont généralement vus comme une conglomération de bibliothèques visant à faciliter la programmation des jeux. Ils sont très populaires parmi les développeurs, puisque contrairement aux API, ils offrent une certaine aisance pour l’utilisation directe des fonctions et des routines Intrinsèques aux jeux vidéo. Comme par exemple le dessin direct sur l’écran, le chargement des images et des objets en 3D et des fichiers son, la capture de l’interface utilisateur comme le clavier ou la souris ou la manette, le scrolling, le bit blitting,le clipping, les sprites, le networking…etc. Ça peut Inclure les plateformes comme, SDL, Allegro, PyGame, SFML, ou Raylib.

Godot 4.0 introduction

Et dernièrement, les moteurs de jeux vidéo. Ces derniers sont totalement différents des 2 précédents dans le sens où ils ne tournent pas autour d’un langage de programmation qui va les utiliser comme des bibliothèques comme pour les solutions précédentes. Dans les moteurs de jeu, généralement le langage de programmation est, comme parmi d’autres, un simple outil utilisé pour la création de jeux vidéo. Ainsi le plus souvent les objets créés à l’extérieur du langage de programmation, sont utilisés pas plusieurs outils du moteur. Les outils sont concrètement des petits logiciels de haut niveau destinés à l’implémentation des opérations beaucoup plus complexes que de simples opérations graphiques. Comme par exemple les éditeurs de niveaux, les éditeurs de maps, moteurs physiques, éditeurs d’animation, éditeurs de particules…etc. On peut citer quelques moteurs de jeux les connus comme Godot, Unity, Unreal Engine, ou encore Game Maker. La vidéo en haut est une introduction au moteur Godot, et plus précisément sa nouvelle version 4 qui offre beaucoup d’améliorations par rapport aux versions précédentes.

Le modèle OSI dans l’internet

Internet aujourd’hui est considéré comme un outil banal de communication. Mais sous cette forme de simplicité et de commodité se cache la forme la plus avancée et la plus sophistiquée de télécommunication que l’être humain n’a pu concevoir jusqu’à maintenant. L’internet d’aujourd’hui englobe des milliards de machines et d’appareils étalés sur toute la planète, Ils communiquent entre eux en utilisant des millions de kilomètres de fibre optique, des câbles en cuivre, des liaisons sans fil et satellitaires. Pour pouvoir organiser et structurer la communication dans cette structure hyper complexe et massivement connectée, les ingénieurs en songeaient à utiliser un modèle universel appelé OSI qui va garantir la connectivité, la fiabilité, et la sécurité pour la communication des différents nœuds de ce qu’on appelle aujourd’hui le web ou plus spécifiquement le WWW (World Wide Web).

Modèle OSI

La vidéo suivante de la chaîne ByteByteGo permet d’une manière simplifiée à faire comprendre le fonctionnement du modèle OSI. Le plus important dans la compréhension de ce modèle est de visualiser le processus d’encapsulation de l’information sur plusieurs couches, en sachant que l’idée globale de transmission de l’information sur internet est de découper l’information en plusieurs paquets (processus d’encapsulation), et de les déverser sur internet en les laissant libres de prendre le chemin qui jugent le plus optimal vers leurs destinations. C’est le plus simple moyen que Les ingénieurs ont trouvé pour faire transmettre l’information dans un réseau si complexe et si hétérogène. 

Chaque couche dans le modèle OSI est responsable d’une partie ou d’une fonctionnalité bien précise dans la communication à travers internet. Ainsi, la couche une est responsable d’encoder et de décoder les bits en signaux physiques, que ça soit en impulsions électriques, faisceaux photoniques, ou ondes électromagnétiques. La 2e couche est responsable de la communication point à point entre 2 nœuds sur le même médium physique de communication, que ça soit fil électrique, fibre optique, ou ondes radio. La 3e couche est responsable de la transmission des paquets d’un réseau à l’autre parcourant les réseaux hétérogènes à la recherche de la destination. La 4e couche est responsable de la reconstruction de l’ensemble du flux d’informations initial, à partir des paquets transmis. La 5e et la 6e et la 7e couche sont le plus souvent amalgamées pour représenter la partie lorsque 2 applications entrent en communication en utilisant un protocole bien précis, comme HTTP, FTP, SMTP…etc. 

Podcast du fondateur d’OpenAI et la création de ChatGPT

Tout le monde ces temps-ci parle de ChatGPT, c’est l’intelligence artificielle (IA) qui fait actuellement couler beaucoup d’encre et qui sollicite l’intrigue et la curiosité de beaucoup de monde, que çà soit dans le monde de la technologie ou des personnes lambda. Et franchement il y en a de quoi, j’ai personnellement pu tester cette intelligence et sincèrement ça m’a bluffé. C’est la première fois où personnellement je peux communiquer avec une intelligence artificielle sans avoir l’impression que c’est une machine. ChatGPT arrive aisément à comprendre la pensée humaine, j’ai même essayé de lui formuler des requêtes un peu obscures et difficiles à comprendre, qu’elle a réussi à déchiffrer facilement. On arrive aisément à construire un dialogue constant, claire, et soutenu comme si vous discutez avec un humain normal. 

Podcast avec le CEO de la firme créatrice de ChatGPT

Pour beaucoup, c’est la première fois qu’une IA atteint ce niveau avancé d’intelligence. Il y a même certains chercheurs qui la qualifient d’enfant AGI, l’AGI étant une intelligence totalement indépendante avec sa propre conscience et son libre arbitre. Bien sûr tout cela fait peur, on ne s’attendait pas à de tels progrès en si peu de temps. D’après l’intelligence elle-même beaucoup de professions pourrait facilement être remplacé par l’intelligence artificielle, comme le métier d’enseignant, avocat, comptable, médecin…etc. 

Vous pourrez vous-même facilement tester cette intelligence si vous le souhaitez. À mon avis le moyen le plus simple de le faire et d’utiliser le moteur de recherche Bing et le navigateur Edge de Microsoft, vous aurez la possibilité d’engager une conversation avec le bot Bing, qui représente selon Microsoft une variante de ChatGPT 4, la version la plus récente. Vous pourrez même aussi tester une autre intelligence artificielle pour générer des images d’une façon automatique à partir de texte, appeler DALL-E conçu aussi par OpenAI. Il faut savoir qu’il y a un partenariat entre Microsoft et OpenAI, les créateurs de ChatGPT, ce qui permet à Microsoft d’utiliser leurs produits. À la base OpenAI était une firme lancée par Elon Musk en personne pour contrer le monopole de Google sur le domaine de l’intelligence artificielle avec son intelligence DeepMind. Sur la vidéo en haut Le CEO OpenAI Sam Altman s’exprime sur le podcast de Lex Fridman sur les produits de OpenAI en exposant les grands dilemmes de l’intelligence artificielle sur l’humanité et les implications importantes qu’elle apporterait aux humains au futur probablement proche. 

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. 

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.