Articles sur Blog

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. 

10 compétences à maitriser par un informaticien

Tout au long de sa carrière, l’informaticien aurait besoin d’apprendre plusieurs compétences. C’est dans la plupart des cas des compétences qu’aurait à utiliser presque au quotidien. Ils ne sont pas totalement obligatoires mais il serait pour lui difficile de les contourner.

1. L’algorithmique et structure de données : cette partie concerne beaucoup plus les développeurs, mais la compréhension de comment un ordinateur fonctionne est indispensable. Il faut se rappeler qu’un ordinateur est une machine comme une autre, sa particularité est de traiter l’information à la place de la matière comme les autres machines. Ainsi les structures de données permettent la compréhension de l’organisation de l’information. Et l’algorithmique, la manière dont les données sont traitées par la machine. 

2. Le hardware et matériel physique : dans cette partie l’informaticien doit avoir une perception globale de la composition physique hardware d’un ordinateur. Entre autres, les composantes essentielles d’un ordinateur, comme par exemple, le processeur, la RAM, le disque dur, la carte mère, la carte graphique…etc. De comprendre leurs caractéristiques et de pouvoir les remplacer et changer leurs paramètres. 

3. Les outils de bureautique : ou autrement appelés, les outils office en référence à Microsoft Office. C’est généralement les outils qui vous permettent d’écrire et formater du texte et de l’imprimer avec Microsoft Word par exemple. De remplir des tableaux avec des fonctions basiques de statistiques et de diagrammes avec Microsoft Excel. De préparer des présentations pour les exposer dans des réunions avec Microsoft PowerPoint. Ou rédiger des rapports techniques bien structuré avec Latex.

4. Langages de programmation : Cette partie aussi concerne principalement les développeurs, mais généralement un informaticien aurait au moins à maîtriser un ou deux langages de programmation. Pour la maîtrise totale d’un langage de programmation, beaucoup de temps et d’expérience sont nécessaires. Appréhendé de fond en comble un langage de programmation est relativement difficile. 

5. Linux : Linux n’est pas un système d’exploitation comme les autres, on peut dire qu’il est spécifique et bien taillé aux informaticiens. Contrairement à Windows qui est un système d’exploitation grand public, Linux est plus technique. Il permet à son utilisateur aguerri de faire ce qu’il veut avec ce système d’exploitation. Il peut le modifier comme il lui semble, dans le sens où il peut changer la structure interne du système pour s’adapter au hardware et au besoin de l’application. Il est aussi très adapté au processus intrinsèque à l’administration et le contrôle des machines, comme l’automatisation, la sauvegarde et le backup, la sécurité, le monitoring…etc.

6. Le Web : savoir utiliser le web comme un simple utilisateur. Et surtout reconnaître les bases de fonctionnement du web, comme les protocoles (html, http, ftp, ssl, tls…etc). Les serveurs (serveur web, serveurs de base de données, serveurs d’authentification, serveurs de clés de chiffrement…etc.). Les langages de programmation (html, css, php, javascript, ruby…etc.). La pile de développement des applications web avec ses 2 parties principales le front-end et le back-end. Les API et les services web…etc. 

7. Les réseaux informatiques : comprendre le fonctionnement d’un réseau informatique et aussi très importante pour l’informaticien. Comprendre les bases sur le fonctionnement d’un réseau que ça soit filaire ou sans fil. Que ça soit un simple réseau local à la maison, ou un réseau plus grand envergure englobant toute une entreprise. Reconnaître les protocoles utilisés et le processus de l’encapsulation de l’information à travers les couches OSI…etc. 

8. La sécurité informatique : dans un monde presque entièrement digitalisé l’information fait face à plusieurs menaces, dont le vol, la substitution, la corruption, la destruction…etc. Ainsi, il devient indispensable pour un informaticien de savoir protéger l’information, c’est comme installer des systèmes de sécurité dans sa maison. Dans ce domaine l’informaticien doit savoir comment sécuriser ses machines et son réseau, comment créer des mots de passe robustes, ne pas tomber dans les pièges des pirates, reconnaître les liens ou les emails ou les messages à risque…etc. 

9. L’administration des serveurs et le cloud : savoir contrôler les serveurs ou des machines distantes fait aussi partie des compétences inhérentes à un informaticien. Dans ce cas de figure, les machines sont souvent assez puissantes, ce sont généralement des serveurs à plusieurs milliers de kilomètres de distance. Qui sont uniquement accessibles par la voie du réseau, ce qui rend leur utilisation particulière et différente d’un simple PC. Le cloud c’est pratiquement la même chose mais au lieu de contrôler des serveurs vous aurez à contrôler tout un système logiciel et matériel interconnecté, ce qui rend le processus encore plus complexe.

10. Les outils de communication et les réseaux sociaux : pour les outils de communication il y en a du plus simple comme les emails et les logiciels de messagerie instantanée (Skype, Messenger, WhatsApp ou Viber), au plus sophistiqués comme Discord et mIRC. Les réseaux sociaux de l’autre côté sont à double tranchant, ils peuvent être néfastes par leurs addictions et le bafouillage des meurs et de la vie privée. Et de l’autre côté, le plus simple moyen actuel de s’ouvrir au monde et d’accéder à des milliers voire des millions de personnes. 

On a pu voir sur ces points quelques connaissances indispensables pour un informaticien tout au long de sa vie professionnelle. On pourrait aussi rajouter la maîtrise des outils de l’intelligence artificielle, néanmoins ça reste un domaine assez récent et pas encore mature. Dans tous les cas, il faut savoir que les connaissances de l’informaticien ne se résument pas à ces quelques points, à vrai dire, tout au long de sa carrière l’informaticien ne va pas cesser d’apprendre. 

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. 

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.