Apprendre l’électronique en jouant à la mécanique

Il existe quelques domaines scientifiques qui sont plus inaccessibles que d’autres. Et on pourrait facilement mentionner l’électronique et la mécanique quantique. Pourquoi, comme titre d’exemple, ces 2 disciplines sont plus difficiles à apprendre que d’autres ? La raison est qu’ils sont impalpables, on ne peut pas directement les voir, on ne peut pas directement les toucher. Dans notre esprit, ça reste juste des modèles imaginatifs qu’on ne peut guère réellement apercevoir par nos 5 sens.

Circuit mécanique pour faire analogie aux circuits électrique

C’est pour cette raison que pour faire comprendre l’électronique aux étudiants, les enseignants font l’analogie à l’eau qui circule dans un circuit de tuyauterie. Ainsi, l’électricité qui traverse un fil électrique peut être représentée par l’eau qui circule dans un tuyau. Et à vrai dire, il y a beaucoup de similitudes entre l’électricité et l’eau dans ce cas précis. Par exemple, la batterie peut être représentée par une citerne d’eau qui alimente la tuyauterie d’une maison par exemple. Le voltage est représenté par la hauteur de l’eau à l’intérieur de la citerne, ou aussi l’aperçu comme la pression de l’eau. L’ampérage c’est le débit en litre par seconde d’eau dans un tuyau. La résistance c’est le diamètre du tuyau, plus un tuyau est serré, plus la résistance est élevée. Un condensateur est représenté par une membrane ou diaphragme élastique qui bloque le tuyau. L’inducteur comme un moulin à eau avec une certaine masse. La diode comme une valve à sens unique. Le transistor, plus ou moins comme un robinet. Les jointures de plusieurs fils électriques comme les T de tuyaux…etc. Plusieurs formules pour les phénomènes physiques sont similaires, mais parfois ça ne colle pas, notamment lorsque cela implique le courant électrique alternatif.

Étonnamment, l’utilisation des engrenages mécaniques est aussi un très bon moyen pour simuler le fonctionnement des circuits électriques. La vidéo m’a vraiment impressionné par la capacité de ces mécanismes mécaniques à pouvoir reproduire le fonctionnement de circuits électroniques bien connus. Comme le Pont diodes, l’Oscillateur, les filtres Passe-Haut et Passe-bas,la Flip-flop, ou la porte Xor. Que d’ailleurs, je ne pense pas faisable avec des tuyaux d’eau. La vidéo et celle de Steve Mould. C’est sur sa chaîne YouTube, d’ailleurs c’est une excellente chaîne dédiée pour faire apprendre la science et la technologie. 

Introduction aux architectures des ordinateurs

Voici une vidéo qui fait un excellent travail pédagogique pour faire comprendre plus ou moins en détail comment une architecture d’ordinateur fonctionne à l’intérieur. Plus précisément, et en suivant l’architecture de von Neumann (Illustré sur l’image en bas), la vidéo se focalise principalement sur l’interconnexion entre les 3 composantes des architectures de von Neumann, qui sont le processeur, la mémoire, et les unités d’entrée/sortie. Cela dit, il est important d’avoir une vue globale sur l’architecture et comment elle fonctionne d’une manière générale et théorique, il est aussi très important de comprendre le détail. Ainsi, la vidéo suivante démontre en détail comment le processeur arrive à communiquer avec la mémoire et les unités d’entrée/sortie.

L’achitecture de von Neumann

Néanmoins, un point très important à prendre en considération. L’explication donnée dans cette vidéo concerne plus particulièrement les architectures anciennes, des architectures pratiquement des années 80. De nos jours, les ordinateurs et les PC ont totalement évolué et changé de manière de communiquer. C’est devenu beaucoup plus complexe pour que ça soit enseigné à des étudiants universitaires en première ou 2e année. La vidéo en question est celle de la chaîne YouTube de Ron Mattino, c’est une très bonne chaîne bien connue pour faire de la vulgarisation en informatique et en électronique.

Introduction aux architectures des ordinateurs

L’avenir de l’intelligence artificielle dans l’industrie du jeu vidéo

Il y a 2 mois de cela s’est déroulée au Colorado aux États-Unis, la plus importante conférence en recherche scientifique concernant les nouvelles technologies utilisées dans la 3D et la synthèse d’image. La conférence en question s’appelle siggraph, et vous pouvez visiter le site officiel pour voir l’état de l’art sur les différentes technologies présentées dans la conférence. Mais pour notre part, comme illustré sur la vidéo en bas, on va juste s’intéresser à l’utilisation de l’IA dans les domaines qui peuvent aboutir dans le domaine du jeu vidéo. La vidéo question et celle de la chaîne Youtube Two Minute Papers, une chaîne très connue et répandue pour ses présentations de la recherche académique dans le domaine de l’intelligence artificielle.

L’intelligence artificielle dans synthèse 3D

L’apport de l’IA dans le domaine du jeu vidéo dans le futur sera sans doute non négligeable. Par exemple, sur la vidéo on peut voir l’évolution des techniques du texte vers image, qui permettent en utilisant l’IA, de générer des images de haute qualité en arrivant même à contrôler les personnages dans l’image en question, ainsi que les postures et les formes générales des personnages et des objets se trouvant dans l’image. On peut apercevoir aussi la génération automatique des vidéos par l’IA, qui commencent à devenir de plus en plus qualitatives et plus réalistes. Ou ce qui m’a vraiment impressionné, la génération d’objets en 3D à partir d’un texte, ce qui va grandement simplifier le travail des artistes dans le domaine vidéoludique. Sans oublier l’efficacité de l’IA à pouvoir faire la simulation physique réaliste avec peu de ressources, car pour faire la simulation réaliste en utilisant les méthodes classiques, la machine devrait être superbement puissante. Et le dernier point impressionnant dans cette conférence, c’est l’amélioration de la technique du Ray tracing, cette technique récemment intégrée dans les cartes graphiques pour plus de réalisme dans le rendu 3D. Les nouvelles techniques de simulation considèrent la lumière non plus comme un faisceau lumineux, mais comme des ondes électromagnétiques, ce qui est de plus en plus fidèle à la réalité physique du phénomène. 

L’algorithme A* pour la recherche de chemins

On a déjà au préalable évoqué dans un blog précédant un algorithme de recherche très connu qu’est celui de Dijkstra. On avait évoqué l’importance des algorithmes de recherche, ça permet principalement pour les logiciels de navigation comme titre d’exemple, de trouver d’une façon méthodique le plus court chemin à partir de votre position actuelle dans une carte vers une destination donnée. L’algorithme évoqué dans la vidéo en bas de la chaîne YouTube Computerphile est tout aussi important, C’est l’algorithme A* et représente une réelle amélioration de l’algorithme de Dijkstra.

L’agorithme A*

Lorsque nous avons décrit précédemment l’algorithme de Dijkstra, ça nous a sauté aux yeux combien l’algorithme était si intuitif. En prenant un papier et un crayon, et avec un peu de chance il est possible redécouvrir l’algorithme par soi-même. L’hypothèse de départ est que vous avez une carte de plusieurs villes interconnectées par des routes avec des distances différentes, le but est de trouver le plus court chemin d’une ville de départ vers une ville d’arrivée. Intuitivement, on va commencer par la ville de départ avec une distance de 0, et explorer les voisins directs de cette ville tout en avantageant la ville la plus proche. Algorithmiquement, ça va être une file qui contient la liste ordonnée des villes intermédiaires avec leurs distances à la ville de départ. Ce même processus l’exploration va se répéter pour la tête de file, donc la ville la plus proche. Et continuez au fur et à mesure avec les autres villes jusqu’à y arriver à la ville de destination. Bien sûr dès qu’on termine l’exploration d’une ville en doit la supprimer de la liste, puisque c’était au préalable la ville la plus proche et c’est impossible de trouver dans la liste des villes suivantes un chemin plus cours. Il faut aussi entre-temps mettre à jour les distances des villes anciennement explorées si un nouveau chemin plus court est découvert.

Comparaison de Dijkstra et A*

L’algorithme A* représente une extension de l’algorithme de Dijkstra. Il va utiliser ce qu’on appelle en mathématiques une heuristique pour améliorer l’algorithme de Dijkstra. L’heuristique est une amélioration intelligente de l’algorithme de Dijkstra en le poussant plus rapidement vers la destination, et en lui évitant de faire l’exploration de la totalité des courts chemins. Cette amélioration est aussi si intuitive que l’algorithme de Dijkstra lui-même. Il a suffi de modifier l’algorithme non plus d’ordonner la liste des villes par le plus court chemin, mais par l’addition du plus court chemin avec la distance directe (ou à vol d’oiseau) de la ville vers la destination. Ainsi les villes les plus loin de la destination vont être pénalisées et les villes les plus proches vont être avantagées. On peut voir sur la vidéo en haut de la comparaison entre l’algorithme Dijkstra et l’algorithme A*, et comment l’algorithme de Dijkstra fait l’exploration en largeur et le A* étend son exploration vers la destination. Contrairement à l’algorithme de Dijkstra, l’algorithme A* ne garantit pas le plus court chemin.

Le path-fider du jeu StarCraft

L’algorithme A* étoile n’est pas aussi précis que l’algorithme de Dijkstra, mais il a l’avantage d’être beaucoup plus rapide. Ce qui le rend un candidat idéal pour les applications temps réel, où le temps de réponse doit être rapide ou borné. C’est particulièrement vrai pour les jeux vidéo avec une vue de haut, où il faut cliquer sur la souris et laisser le caractère trouver son propre chemin sur le terrain. Ça concerne principalement les jeux de stratégie RTS et les jeux de rôle RPG isométrique. L’algorithme assurant le chemin du caractère vers sa destination est généralement appelé Path-Finder. Vous pouvez voir par exemple sur l’image en haut, l’algorithme A* utilisé comme Path-Finder dans le très célèbre jeu de stratégie StarCraft. D’autres algorithmes plus modernes et plus efficaces sont utilisés comme Path-Finder dans les jeux modernes. L’algorithme A* est aussi utilisé en intelligence artificielle pour la résolution des labyrinthes, du rubik’s cube, ou le puzzle du Taquin, et beaucoup bien d’autres. 

L’interview du créateur du C++

Non dans un but de l’embellir, le langage C++ est un des langages proéminent dans le paysage de l’informatique moderne. C’est un langage souvent enseigné dans les instituts et universités, et souvent prédominants dans certains secteurs industriels, comme les systèmes embarqués, les jeux vidéo, la robotique, l’automobile, l’aéronautique, et beaucoup d’autres.

La vidéo en bas est l’interview du créateur du langage C++, c’est le danois Bjarne Stroustrup, par le célèbre académicien Lex Fridman sur sa chaîne Youtube de Podcast. Il a commencé la conception du langage dans le début des années 80 dans les laboratoires Bell Labs aux États-Unis. Il explique sur la vidéo comment il s’est inspiré du langage orienté objet Simula, et comment l’introduction de la Programmation Orientée Objet a fait un bond historique énorme sur la courbe d’évolution des langages de programmation.

Interview de Bjarne Stroustrup

La principale innovation derrière le langage C++ et la programmation orientée objet est de donner au programmeur la faculté et la flexibilité de créer ses propres types (appelés Classes), et la personnification de l’interaction entre leurs éléments (appelés Objets), ainsi permettre aux programmeurs de créer leurs propres opérations (appelés Méthodes). Ce qui était au préalable fixe ou limité dans les précédents  langages de programmation. Le C++ apporte aussi l’Héritage et le Polymorphisme. Le premier permet de réduire la définition et inter-lier les différents types créés. Et le 2e permet de choisir automatiquement l’opération adéquate et spécifique au type impliqué dans l’opération.

La partie à mon sens, la plus intéressante de l’interview, est lorsque Bjarne Stroustrup explique sa philosophie et sa vision directrice lors de la création du langage, c’est ce qui appelle zero-overhead, c’est mis en-avant sur la vidéo en bas. Son critère était qu’un mécanisme ou une abstraction pour qu’elle soit intégrée au langage, elle ne doit ajouter aucune ou zéro surcharge aux performances du programme. Comme par exemple pour les Classes, Il est toujours possible de recréer un concept similaire dans le langage C, mais d’un point de vue de programmation c’est plus facile de le faire en C++, et c’est surtout équivalent du point de vue de performance. C’est de même pour les Templates ou la programmation Générique. Bjarne Stroustrup a aussi fait l’explication d’un nouveau mécanisme appelé Concept, qui pour faire simple, permet aux programmeurs d’imposer des contraintes sur les opérations possibles sur les nouveaux types créés. Comme par exemple, on ne peut pas faire des opérations arithmétiques sur un type de chaînes de caractères. 

Le principe du zero overhead

10 problèmes algorithmiques communs pour les entretiens d’embauche

C’est bien connu que l’algorithmique et les structures de données sont la pierre angulaire lorsqu’il s’agit de la programmation informatique. D’ailleurs il existe beaucoup de cours et tutoriels sur internet et sur le sujet. En sachant que dans beaucoup de cas ça représente un axe principal dans les formations en informatique. Malgré cela, la programmation dans les entreprises informatiques dans le cas réel se situe à un niveau supérieur. Les algorithmes sont plus difficiles, les problèmes sont plus complexes, et l’envergure des programmes est en beaucoup plus grande. Ce qui oblige les étudiants en informatique de s’entraîner et de s’exercer sur une forme d’algorithmes plus complexe et plus poussée pouvoir postuler à des postes de programmation dans des sociétés du high-tech.

10 problèmes communs pour les entretiens d’embauche 

Ce qui nous ramènent a présenté la vidéo en haut. C’est une vidéo de la chaîne académique YouTube freeCodeCamp comprenant 10 problèmes algorithmiques qui sont censés être difficiles pour des informaticiens débutants. C’est un bon moyen de préparation et d’entraînement pour les entretiens d’embauche et le passage à la vie professionnelle. 

Cours sur les systèmes d’exploitation

Tout informaticien sait que les systèmes d’exploitation forment une couche logicielle importante pour le bon fonctionnement d’un ordinateur. Pour bien comprendre le bon fonctionnement des ordinateurs, Il faut bien comprendre la distinction entre logiciel et matériel. Un système d’exploitation est du logiciel, mais différent des logiciels normaux. Les systèmes d’exploitation sont différents des applications normales, Par exemple, un système d’exploitation ne peut pas être un jeu vidéo, ou un lecteur audio, ou, un éditeur de texte. Les systèmes d’exploitation, comme Microsoft Windows, Linux, ou MacOS, forment une couche logicielle intermédiaire entre le hardware et entre les applications. Ça simplifie d’une manière significative aux applications l’utilisation du matériel. Ça permet aussi aux différentes applications de cohabiter en symbiose sur le même système. Ça donne aussi aux utilisateurs les mécanismes et les outils pour contrôler leurs propres machines. 

Cours sur les Systèmes d’exploitation

On peut encore continuer à énumérer les différents rôles d’un système d’exploitation. Mais il faut savoir que le rôle des systèmes d’exploitation est primordial en informatique. Sur la vidéo en haut de la chaîne Youtube Lectures for sleep & study, un excellent cours sur les systèmes d’exploitation est présenté. L’aspect abordé sur cette vidéo est l’aspect académique, ça veut dire que ça parle du côté technique interne des systèmes d’exploitation. Ça permet principalement aux étudiants en informatique de comprendre comment réellement un système d’exploitation fonctionne de l’intérieur. 

Analyse de l’ordinateur de la fusée qui s’est posée sur la Lune

Ça a été dit que le moment où l’humain a foulé le premier pied sur la lune, était un grand pas pour l’humanité. Et c’était vrai, c’était une révolution sans précédent. Dans la vidéo qui suit, on va voir une analyse croustillante sur l’ordinateur de bord qui a beaucoup aidé à la réalisation de cette mission. L’ordinateur en question s’appelle Apollo Guidance Computer (AGC), un ordinateur très faible techniquement en comparaison aux normes des ordinateurs des temps modernes. Historiquement, c’était un ordinateur qui a été développé par l’université du Massachusetts dans le début des années 60 avec des techniques, disons-le, ingénieuses et peu présentes dans les architectures modernes. On peut aussi mentionner des procédés obsolètes comme par exemple ; L’utilisation du complément-à-1 un pour représenter les entiers, alors que toutes les architectures modernes utilisent le complément-à-2. Ou l’utilisation de la technologie obsolète de mémoire dite mémoires à tores de ferrite. Ou l’utilisation des banques de mémoire lorsque l’architecture possède peu de bites pour adresser la mémoire dans sa totalité. Néanmoins, l’AGC utilise des techniques, à mon avis, qui sont révolutionnaires pour l’époque. Comme l’encodage de l’adressage indirect utilisant une technique pour hacker une instruction et la fusionner avec la suivante. Ou l’utilisation de l’adressage mémoire pour accéder aux différents registres, ce qui simplifie significativement la programmation. Ou l’instruction bizarre, jamais vu de ma part, appelée CCS “Count, Compare, and Skip”. Ce qui m’a aussi marqué c’est l’utilisation des portes discrètes universelles NAND pour construire toutes l’architecture.

Présentation sur Apollo Guidance Computer

Moi personnellement, ces voyages dans le passé sur les architectures de l’époque, j’en raffole. J’ai même développé une passion dans l’exploration et la compréhension des architectures des machines et des consoles du passé. Vous allez voir sur la vidéo beaucoup d’explication technique concernant l’architecture des ordinateurs et la conception hardware, du passé. À mon avis, c’est l’un des meilleurs endroits aux étudiants pour apprendre et se familiariser avec ce domaine du hardware. La vidéo a été conjointement présentée par Michael Steil (voici son blog) and Christian Hessmann, le premier est un nom bien connu dans ce spécifique domaine. Comme de coutume, ça a été présenté à la plus grande convention de hacker en Europe, le Chaos Computer Club, qui se déroule tous les ans en Allemagne (leur site web et chaine Youtube), dans laquelle Michael Steil est souvent invité.

La séquence de démarrage de Linux

N’importe quel informaticien de nos jours sait ce que c’est Linux. C’est le système d’exploitation Open-source et gratuit, adoré par les informaticiens puisqu’il offre beaucoup plus de commanditées aux informaticiens par rapport aux autres systèmes d’exploitation. Néanmoins, dans le marché grand public des PC de bureau, il se place à la 3e place après Windows et Mac OS. L’un des points forts qui rend Linux attrayant pour les informaticiens, est son ouverture et la possibilité de facilement le modifier. Comme vous allez voir sur la vidéo en bas, le processus de démarrage, appelé aussi le processus de boot, de Linux est bien connu et bien documenté, et bien flexible aussi. Contrairement aux autres systèmes d’exploitation. Cet aspect est très intéressant pour les informaticiens d’un point de vue pédagogique, puisque ça permet de comprendre comment un système d’exploitation se comporte. Et aussi d’un point de vue de flexibilité, puisque ça devient plus facile de modifier et de customiser le système d’exploitation aux besoins de l’application.

Linux booting process

La vidéo en haut et celle de la chaîne Youtube ByteByteGo. Une très bonne chaîne technique qui explique généralement des concepts informatiques. Vous allez voir dans la vidéo la succession tout le processus de démarrage du système d’exploitation Linux.

Adresse réseau MAC

Le fonctionnement des réseaux informatiques à un bas niveau, ça veut dire à un niveau proche de la transmission électrique, là où les protocoles essentiels et élémentaires formant l’infrastructure basique qui va construire cet immense réseau d’Internet. On trouve principalement 2 formes d’adresses pour distinguer une entité dans le réseau. La plus connue est sans doute l’adresse IP, c’est principalement l’adresse qui va distinguer votre ordinateur parmi des millions d’ordinateurs sur l’ensemble d’internet. C’est une adresse dite logique, parce qu’elle n’est pas fixe à la machine, et change souvent car elle est en général affectée par le fournisseur d’accès à Internet ISP. La 2e forme d’adresse est l’adresse MAC, et contrairement à l’adresse IP cette adresse est fixe à la machine et ne théoriquement pas être changée. Cette adresse est généralement appelée l’adresse physique, et plus précisément elle se trouve gravée sur la carte réseau (le NIC) de la machine. Contrairement à l’adresse IP, L’adresse MAC est normalement utilisée pour reconnaître les machines locales dans le même réseau, les machines qui ont une connexion physique directe, comme par exemple les ordinateurs, les téléphones, les tablettes connectés au même routeur dans la maison. Dans le réseau local, une machine doit avoir les 2 adresses en même temps, et c’est le protocole ARP qui permet de faire la liaison entre ces 2 adresses en détenant une base de données des adresses de toutes les machines sur le réseau. Sur la vidéo en bas de la chaîne PowerCert Animated Videos plus de détails sont donnés et la manière exacte d’utiliser ces adresses est bien expliquée.

L’adresse MAC