Jeux vidéo sur le thème des Systèmes embarqués

Les ingénieurs en systèmes embarqués sont les ingénieurs responsables de la conception et la réalisation de la quasi-totalité des appareils électroniques modernes, comme par exemple, les appareils d’électroménager, incluant la machine à laver, l’aspirateur, le réfrigérateur, le micro-onde…etc. Ou encore le consommable électronique, comme les smartphones, les caméscopes, les téléviseurs, les consoles de jeux…etc. Ou bien encore l’électronique enfouie à l’intérieur des machines, comme l’électronique dans les voitures, les véhicules de transport, dans des machines industrielles…etc. Ou l’électronique des équipements de bureau, comme les imprimantes, les scanners, fax, photocopieuses…etc. Il y a beaucoup d’exemples, c’est quasiment tous les appareils comportant de l’électronique, mis à part les PCs, les ordinateurs et les machines informatiques. Essayer de comprendre la définition des systèmes embarqués peut mener à confusion, puisque dans les exemples ci-dessus c’est l’électronicien qui doit normalement réaliser la partie électronique de la machine, mais l’électronique des appareils moderne a beaucoup changé en comparaison avec la pure électronique d’il y a 20 ans, dans les systèmes embarqués modernes, l’électronique repose sur un processeur ou un microcontrôleur que l’ingénieur non seulement doit le concevoir électroniquement mais aussi de pouvoir le programmer, en ajoutant à cela des connaissances en programmation et en informatique pour ce dernier. La vidéo en bas est une petite présentation du jeu.

Présentation de Shenzhen I/O .

Le jeu en question s’appelle Shenzhen I/O, en référence à la ville en Chine de Shenzhen, et comme décrit dans Wikipédia, c’est la métropole pilier du high-tech et des semi-conducteurs de la Chine, c’est l’équivalente et la concurrente de la Silicon valley au États Unis. Le jeu fait la simulation d’un ingénieur dans un future proche qui immigre vers Shenzhen, pour travailler dans la conception d’appareils électroniques. Le plus intéressant dans le jeu c’est que le joueur aura comme principale tâche la résolution de puzzles sous format de construction de circuits électroniques, et de faire leurs programmations en langage assembleur, il a aussi la possibilité d’utiliser les datasheets et l’oscilloscope. Les circuits sont simplistes et la programmation en assembleur est rudimentaire, mais les concepts utilisés sont réels directement inspirés de systèmes authentiques, et ce qui m’a encore le plus surpris c’est que j’ai trouvé des travaux de recherche scientifique sur ce jeu, c’est considéré comme une nouvelle forme d’apprentissage des technologies modernes en utilisant les jeux vidéo. Le lien du Shenzhen I/O est par ici pour plus d’informations. Il y a aussi en bas la vidéo d’un joueur qui a réussi à crée le jeu de Tetris sur le simulateur de Shenzhen I/O.

Tetris sur Shenzhen I/O

Instruments de tests des réseaux informatiques

Il est bien connu qu’il existe une panoplie d’outils logiciels pour tester et diagnostiquer les réseaux informatiques, les outils logiciels à connaître et à plus ou moins maîtriser pour diagnostiquer un réseau sont ping, traceroute, ipconfig (ou ifconfig sur linux), nslookup, netstat, ça va vous aider à chercher et de trouver les problèmes logiques dans votre réseau, le plus commun des anomalies, c’est les mauvaises configurations sur l’une des couches TCP/IP, ou le mal fonctionnement de l’un des services réseaux. Par contre le problème devient plus difficile à détecter si ça vient du matériel, en l’occurrence, du câblage, des ports, des switchs, des routeurs, des hubs, des passerelles…etc, dans ce cas de figure, il faut utiliser les outils physiques matériels pour faire le diagnostic. Plusieurs instruments sont exposés sur la vidéo suivante, c’est une très bonne vidéo de la chaîne de PowerCert Animated, le fonctionnement des outils est très bien expliqué ainsi que leurs principes de fonctionnement.

Outil de tests réseaux

Un instrument qui m’a particulièrement attiré l’attention, et que je ne connaissais pas l’existence auparavant, est le TDR (Time Domain Reflectometer), c’est un outil apparemment très puissant par rapport autres, son principe de fonctionnement est d’envoyer un signal généré par l’instrument sur le câble, et ensuite d’écouter le reflet du signal sur le câble, le TDR en analysant le reflet il peut détecter les malfonctions sur le câble. Il faut savoir que les défauts physiques d’un câble sont parfois très difficiles à détecter, même si le câble fait passer le courant électrique normalement, il y a des cas où il va détériorer le signal pour une raison ou pour une autre, les autres outils ne permettent pas de faire la détection ce genre de défaut.

Le spyware Pegasus

Tout le monde en parle ces jours-ci, c’est le malware ou plutôt le spyware Pegasus, il a fait un tollé dans le monde politique, mais pour cet article on ne va pas s’attarder sur les clivages politiques, et plutôt essayer d’analyser et de comprendre ses aspects technologiques, du moins essayer de faire de la vulgarisation et la prévention dans ce qu’on appelle la cybersécurité.

Le malware Pegasus est comme tout autre logiciel malveillant, est utilisé pour infecter les machines informatiques en s’installant furtivement à l’insu de l’utilisateur de la machine et nuire d’une manière ou d’une autre à ce dernier, ce type de logiciel est généralement contrecarré par les antivirus. Dans le cas de Pegasus c’est différent, c’est un logiciel espion, non détectable par les antivirus, il est même jusqu’à maintenant difficilement détectable même par les experts en sécurité informatique, il cible particulièrement les smartphones d’Apple et ceux avec Android, et permet de subtiliser les données des principales applications installées, d’écouter les conversations téléphoniques, déclencher la caméra ou le microphone, utiliser la géolocalisation, saisir les mots de passe…etc. La vidéo en bas donne une bonne explication sur comment Pegasus fonctionne, et comment au mieux s’en prévenir.

Le spyware Pegasus

Le principal danger de ce malware c’est qu’il a permis récemment l’espionnage d’un chef d’État, des hauts responsables d’état, des journalistes, des magistrats, des défenseurs des droits de l’homme, des activistes…etc. Il est plutôt utilisé à des buts néfastes contrairement à ce qu’il a été promulgué par la société en charge de son développement et sa vente NSO, comme un dispositif pour combattre le terrorisme et la criminalité. La bonne nouvelle c’est que le malware est si cher qu’il ne peut viser qu’une partie très réduite de la population, à savoir les personnes importantes. La mauvaise nouvelle c’est qu’il est quasiment impossible de s’en prévenir puisqu’il arrive même à utiliser des attaques dites zéro-cliques (voir la vidéo en haut pour plus d’informations), ça veut dire qu’il peut infecter un smartphone même si l’utilisateur ne fait aucune erreur, la principale erreur d’un utilisateur pour infecter son smartphone étant de cliquer sur un lien suspect.

Comment parler académiquement

Je suis tombé sur une excellente vidéo faite par un enseignant en MIT (La chaîne de MIT sur YouTube), dont laquelle il fait des explications et des conseils aux étudiants et aux enseignants pour comment communiquer académiquement. Académiquement, ça veut dire dans le cadre de l’éducation, ça inclut l’enseignement pour les enseignants et l’exposition pour les étudiants.

Parler académiquement

J’ai trouvé la vidéo très intéressante, même qu’il faut bien se mettre dans l’esprit que ce type de contenu n’est pas de la science exacte, malgré que vous allez voir l’utilisation d’une équation dans la vidéo, ça reste toujours des avis subjectifs et une perception personnel. Quand même le fait d’avoir un aperçu sur la communication académique selon la vision d’une personne avec une longue expérience et surtout à très haut niveau, reste très très enrichissant.

Mini projets en C et en C++

La réalisation des projets est très importante tout au long du curcus de l’étudiant, et ça lui permet de améliorer ses compétences en programmation. Dans cet article je vais essayer de répertorier un ensemble de projet en langage C et C++ que j’ai pu récupérer sur un site du nom de www.CodeWithC.com, le site liste plus d’une cinquantaine de projet en C et C++. La liste en bas retient que la liste des projets les plus faciles pour débuter.

La liste en bas est celle des projets les plus communs en C et en C++ :

Projets en C :

Projets en C++ :

Le père des livres du langage C

La perspective d’un étudiant pour le langage C, en tout cas c’était le cas pour moi lorsque j’étais étudiant, c’est que c’est un langage différent très puissant, dans le sens où il contient des mécanismes qui ouvrent la porte sur d’innombrables possibilités, comme par exemple la dualité pointeur/tableau, ou-bien la structuration de la boucle for, les unions, les pointeurs de fonctions, le nombre variable d’arguments dans les fonctions…etc. C’était des mécanismes certes parfois difficiles à apprendre mais le potentiel acquit met le langage à des années-lumières des autres langages qu’on étudiais à la même époque en algorithmique, comme le Pascal et le Basic. J’étais toujours intrigué par l’ingéniosité des développeurs de ce langage, et la réalité comme vous allez le voir sur la vidéo en bas, c’est que le langage historiquement a passé par différentes étapes, de réussite et d’échec dans les locaux de la compagnie de recherche Bell Labs, et avec le temps le langage petit à petit a mûri et devenu ce qu’on connaît maintenant comme le langage C.

The C Programming Language – le livre

La personne sur la vidéo s’appelle Brian Kernighan, c’est le coauteur du livre en question pour cet article, mais avant d’en parler du livre il vaut mieux revoir un peu l’historique du langage C. Alors ce langage était développé par Dennis Ritchie quand il était dans les laboratoires de Bell Labs dans le but de développer avec Ken Thompson le système d’exploitation UNIX, et le rendre portable sur plusieurs machines dont le PDP11, le langage C et le système d’exploitation UNIX auront une grande influence après respectivement sur les langages de programmation et les systèmes d’exploitation. Le langage C comme mentionné préalablement, n’a pas était inventé du néant, on peut tracer sommairement son évolution en commençant par le langage CPL, suivi par BCPL, ensuite du langage B, et finalement le langage C.

The-C-Programming-Language-First-Edition

Le livre en question est appelé The C Programming Language écrit conjointement avec Brian Kernighan, la personne interviewée sur la vidéo, et Dennis Ritchie le développeur du langage C, le livre est parfois nommé K&R d’après les initiales des noms des deux auteurs. Ce livre a été pour très longtemps un best-seller et jusqu’à maintenant ça reste un livre intéressent pour apprendre le langage C, la plupart des livres en C qui ont suivi se sont fortement inspirés de lui, moi personnellement j’ai appris le C sur deux livres en français qui sont quasiment identiques dans leurs structures à original K&R. La bonne nouvelle c’est que le livre par son âge (première édition en 1978) est tombé dans le domaine public et il est devenu accessible gratuitement sur internet, d’ailleurs je vous ai mis juste en haut la version PDF à lire sur le site, il y a aussi la version sur les archives d’internet.

Fonctionnement d’un transistor

Dans l’électronique numérique le transistor prend une importance capitale concernant la conception et la création des circuits intégrés, tous les composants informatiques électroniques dans les PC et ordinateurs actuels sont dans la quasi-totalité constitués que de transistors, comprendre son fonctionnement devient primordial pour un informaticien même-s’il faut bien savoir que l’utilisation du transistor dans les circuits numériques reste basique, puisqu’il est utilisé comme un simple interrupteur électrique. La vidéo suivante de la chaîne YouTube d’électronique The Engineering Mindset donne une explication très pédagogique de l’utilisation d’un transistor.

Fonctionnement du Transistor

De l’autre côté, la compréhension du fonctionnement du transistor pour un électronicien représente une étape importante et conséquente dans sa maîtrise du domaine, car il faut savoir que le transistor et souvent pointé comme un obstacle intimidant lors de l’apprentissage de l’électronique, c’est comme les pointeurs en programmation, ils sont difficile à comprendre mais leurs maîtrises est aperçue comme un essor important en habilité de programmation.

Zoom sur un Processeur

Il est toujours fascinant de voir à quel point l’humain a su construire si petit et si complexe les processeurs et les puces électroniques, c’est le domaine de la technologie qui représente le mieux la maîtrise de la précision et de la complexité que l’humain n’a jamais pu réaliser auparavant. Pour rappel, les traces à l’intérieur des processeurs actuels vont arriver bientôt à 2 nanomètres (nanomètre = 2-9 mètre), bientôt sur 1 nanomètre on pourra compter à peu près 10 atomes de silicium, la matière dont les puces sont construites. Et une complexité pour combiner 1 trillion de transistors (1 trillion = 1000 milliards) sur une seule puce, tous soigneusement arrangés et bien synchronisés pour un rôle bien défini, ça donne l’étourdi !

Appréciation du spectacle en image dans la vidéo en bas.

Zoom sur processeur

Et la vidéo suivante est une visualisation d’une simulation électrique au niveau transistor du processeur 4 bits d’Intel le 4004, il contient 2300 transistors. Historiquement c’est le premier microprocesseur à avoir été vendu en 1971.

Intel 4004 en s’exécutant internement au niveau transistor

Différence entre CPU et GPU

Le CPU (Central Processing Unit) est communément ce qu’on appel processeur, et GPU (Graphical Processing Unit) est le processeur spécifique de la carte graphique. La principale différence entre les deux, c’est le CPU est un processeur générique, et théoriquement il peut exécuter n’importe quel algorithme, de l’autre côté le GPU est spécifique pour le rendu graphique et la 3D, il n’est pas générique mais il est très puisant, beaucoup plus puisant que le processeur pour les rendus graphiques. La vidéo en bas est celle de la chaîne YouTube Computerphile est la différence entre ces deux unités de calcul est plus détaillée.

CPU vs GPU

Il existe quelques types d’applications qui sont adaptées pour l’exécution sur GPU, et il même possible d’exécuter ces types de programmes qui ne sont pas graphiques sur le GPU, cette manière de programmer s’inclut dans l’appellation connue sous GPGPU (General Purpose GPU), dans laquelle le programme en question est exécute sur le GPU et pas sur le CPU. Pour le faire, les constructeurs de cartes graphiques comme Nvidia et AMD fournissent des API (des bibliothèques) aux programmeurs leurs permettant la déportation de leurs programmes du CPU vers le GPU. C’est sûr que pas tous les programmes sont adaptés pour l’exécution sur GPU, les plus adaptés sont généralement les programmes hautement parallélisables, comme par exemple la Crypto-monnaie, l’Imagerie, la Simulation Physique, une partie de l’Intelligence Artificiel…etc.

Construire son propre compilateur C

Ça fait un bout de moment maintenant que je travaille sur la conception et construction des processeurs, que ça soit dans le domaine de la recherche ou dans le domaine académique, voici le dépôt GitHub pour tous les processeurs construits jusqu’à maintenant, la plupart sont des processeurs minimalistes éducatifs, sauf peut-être le 6502 qui lui est une implémentation d’un processeur réel, et le Megatron qui est l’implémentation d’une machine réelle. Dans la plupart des cas la programmation sur ces processeurs se fait en langage machine, ça veut dire en binaire, néanmoins quelques-uns ont le privilège d’avoir un assembleur dédié, la création d’un assembleur pour un processeur donnée est trivial et très simple, elle est réalisée à l’aide d’un outil qui simplifie énormément le travail de construction d’un assembleur personnalisé, le nom de l’outil est CustomAsm, il permet de créer un assembleur pour la majeure partie des processeurs actuels, il suffit pour le faire de remplir un fichier de spécification du langage machine et de mettre en correspondance les nouvelles instructions assembleurs à créer.

Mais jusqu’à maintenant je n’ai jamais eu l’opportunité de dépasser cette étape, et passer à l’étape suivante et créer un compilateur distinct pour un processeur donné, la raison est que je n’ai pas trouvé jusque-là une méthode directe et simple pour le faire, crée un compilateur personnalisé n’est pas une simple tâche, ça doit demander beaucoup d’énergie et beaucoup de connaissances théoriques qui ne sont pas si simples. Heureusement à force de chercher et un peu de chance je crois avoir trouvé une solution qui semble relativement gérable, c’est justement un projet fait par une personne avec les mêmes objectifs, créer un compilateur C personnalisé et simplifié pour une architecture matérielle donnée. Le projet semble de difficulté moyenne, disons une estimation entre 5000 et 10000 lignes de code, peut-être plus, c’est très bien documenté, et c’est surtout plus orienté pratique que théorique. Le langage C implémenté n’est pas le langage C complet, mais un sous-ensemble de ce dernier, ça reste quand même d’après l’auteur un compilateur robuste puisqu’il appartient à la catégorie des compilateurs capables de compiler eux-mêmes.