L’algorithme d’encodage de Huffman

L’algorithme de Huffman et l’un des algorithmes les plus connus dans le domaine de la compression de données comme ceux utilisés dans Winzip ou Winrar, il représente principalement l’un des premiers algorithmes de compression textuel. Le plus drôle dans la naissance de cet algorithme est qu’il a été inventé par Huffman lorsqu’il était encore étudiant à MIT, leur enseignant à cette époque leur a donné le choix de choisir entre faire l’examen ou de rédiger un rapport sur un sujet donné, Huffman a choisi d’écrire le rapport qui a ensuite en 1952 produit ce célèbre algorithme de compression.

L’algorithme se base sur le principe de donner un code binaire réduit pour les caractères les plus répandus dans un texte, et inversement de données un code plus long pour les caractères les moins fréquents. D’autre part, l’algorithme de Huffman, permet indirectement de conceptualiser les principes de la théorie de l’information créer par Shannon, une partie de la théorie stipule que l’information la plus importante est celle qui a la probabilité ou (la fréquence) la plus basse, et inversement, l’information la moins importante possède la probabilité la plus élevée dans un texte ou un bloc de données.

Compression par l’encodage de Huffman.

On peut clairement distinguer sur la vidéo en haut l’utilisation d’un arbre binaire, qui permet principalement la synthèse des codes binaires pour chaque caractère. Cet arbre va être créé, premièrement, en affectant la fréquence d’apparition de chaque caractère dans le texte, où chaque caractère va représenter les feuilles de l’arbre, les feuilles avec les fréquences les plus basses vont composer les nœuds avec une fréquence égale à la somme des fréquences des 2 feuilles, d’une manière récursive et ascendante les nouveaux nœuds créent dans l’arbre vont aussi être créés par la somme des 2 nœuds (ou feuilles) avec la plus basse fréquence, jusqu’à ce que tout l’arbre soit construit. 

L’algorithme de Huffman.

Cet algorithme est très important à maîtriser pour les étudiants en informatique, ça permet premièrement de comprendre les principes de la compression, et deuxièmement, d’assimiler les concepts de la théorie de l’information. La première vidéo en haut et celle de l’excellente chaîne YouTube de Tom Scott, une chaîne principalement destinée à la science. Et la deuxième vidéo pour mieux expliquer la création de l’arbre de l’algorithme de Huffman. 

Google Carbon, le nouveau remplaçant du langage C++

Tout le monde en parle, il n’y a pas longtemps des ingénieurs de Google ont fait l’annonce d’un nouveau langage qui pourrait remplacer le langage C++. Pour rappel, le langage C++ est un langage très reconnu, depuis très longtemps il est ancré dans la production de plusieurs types de logiciels. C’est un langage réputé pour sa robustesse et sa rapidité, il est particulièrement populaire dans des logiciels comme les systèmes d’exploitation, les gestionnaires de base de données, les moteurs de jeux vidéo, les systèmes embarqués, la commande industrielle…etc. Malheureusement comme tout autre langage, il possède quelques défauts intrinsèques à ses objectifs de performance et de rapidité, les deux principaux défauts sont, son manque de sécurité comparé aux autres langages, puisqu’il permet d’offrir un accès direct aux entrailles de la machine. Et deuxièmement, le bagage technique que le langage a accumulé à travers les années de sa longue vie, ce qui le rend charger avec des fonctionnalités qui sont devenues aujourd’hui obsolètes, mais le langage doit les conserver pour des soucis de rétrocompatibilité avec les anciennes applications. 

Justement, le langage de programmation proposé par Google nommé Carbone, propose des solutions pour ces deux problèmes mentionnés, plus d’autres améliorations qui sont inspirées des autres langages modernes. En réalité, les ingénieurs de Google, d’après leur déclaration, ne visent pas à remplacer le C++, mais plutôt de proposer une alternative plus flexible et plus sécurisée pour les besoins de la production logicielle moderne, visant même à avoir une interopérabilité bidirectionnelle avec le code du langage C++. L’annonce du langage Carbone s’est faite dans la conférence internationale du langage C++ à Toronto, Canada. Le visionnage de la présentation est disponible sur la vidéo en bas. Il est clair que le langage est encore dans la phase expérimentale, mais les ingénieurs sont suffisamment avancés pour proposer une nouvelle syntaxe pour le langage, que vous pouvez même tester à travers une démo sur le site de compilation online Compiler Explorer. L’un des points positifs du langage Carbone est d’embrasser une approche de développement open source beaucoup plus flexible que la standardisation ISO du C++, d’ailleurs le dépôt github et un serveur Discord sont déjà mis à la disposition à quiconque veut participer à son développement.

L’annonce du langage Carbone

L’automatisation avec Python

On a souvent tendance à l’oublier mais il faut se rappeler que le but initial de l’informatique dans les années 60 et 70 était l’automatiser des tâches administratives répétitives et ennuyeuses pour les employés des entreprises, de nos jours l’informatique a un tout autre visage, puisqu’un PC, une tablette ou un smartphone sont généralement utilisés pour communiquer, naviguer sur internet, voir des vidéos, lire les news, réviser ses cours…etc. Mine de rien, l’informatique reste toujours aujourd’hui le meilleur moyen d’automatiser les tâches administratives, et c’est surtout plus facile avec ce qu’on appelle le langage Python. 

Le langage Python est un langage réputé pour sa facilité d’appréhension et sa versatilité, contrairement aux langages C/C++ qui sont souvent évoqués dans ce blog, le python touche plusieurs horizons, avec premièrement tout d’abord les applications normales de bureau, les applications web, et plus récemment les applications mobiles, il est aussi très convoité pour l’intelligence artificielle et le data science, et pour ce qui nous concerne dans cet article l’automatisation des tâches informatiques. Le python et le langage idéal pour automatiser les tâches comme lire les données des fichiers Excel, de les transcrire sur une page web, d’extraire les tables des sites web, de générer des rapports automatiques de données, faire l’agrégation de plusieurs sources de données, l’extraction et génération automatique de l’information des fichiers PDF…etc. La vidéo en bas de la chaîne YouTube du site web éducatif www.freecodecamp.org est un cours de courte durée pour maitriser les capacités d’automatisation proposées par Python. 

L’automatisation avec Python

Automates pour la conception des appareils automatiques

Le terme automate désigne le concept mathématique d’automates finis (en Anglais Finite-State Machines), ce sont des outils formels mathématiques qui sont le plus souvent utilisés comme des outils pour la conception et la réalisation des machines ou appareils automatiques. Pour notre cas, à l’université, ils sont extensivement enseignés en électronique numérique, ils permettent premièrement de donner une définition théorique pour ce qu’on appelle en électronique les circuits séquentiels, c’est une définition qui va englober tous les circuits numériques actuels, que ça soit processeurs, cartes graphiques, chipsets, mémoires, cartes réseau…etc. Mais aussi, comme c’était le cas pour ses origines, étant un moyen simple et efficace pour la création des appareils automatiques utilisés tous les jours dans notre vie quotidienne, comme les distributeurs automatiques de boissons, les parcomètres (machines de paiement de parking), les ascenseurs, les distributeurs de tickets de file d’attente, les portes électriques, les vitres électriques dans les voitures…etc. En sachant en réalité que la plupart des machines automatique modernes ont transité technologiquement vers ce qu’on appelle les Microcontrôleurs, qui sont des mini-ordinateurs très réduits, ou les System-on-Chip (ou SoC), qui sont aussi des ordinateurs réduits mais beaucoup plus évolués et puissants que les microcontrôleurs. La vidéo en bas de la chaîne YouTube Computerphile donne un aperçu éducatif de comme un automate est sensé fonctionner. 

Les automates finis

La différence entre codeur et programmeur selon Lamport

Avant d’entamer cette question de différence entre programmeur et codeur, il est important de présenter la personne de Lamport. Lesli Lamport est un scientifique mathématicien informaticien très connu, considéré parmi les chercheurs les plus influents dans les sciences de l’information, il a même été récompensé du titre Turing Award en 2013 (l’équivalent du prix Nobel en informatique) et plusieurs autres titres. Il est surtout connu pour le développement dans les années 80 de la première version de LaTeX, un logiciel de traitement de texte très répondu, au même titre que Microsoft Word, avec comme axe d’orientation le formatage automatique du texte. Lamport est surtout très bien connu académiquement par 3 algorithmes très populaires dans les cours universitaires spécifiques au domaine des Systèmes Distribués, qui sont l’Horloge de Lamport, la Cohérence séquentielle, et la Tolérance aux fautes Byzantines. Il travail actuellement chez Microsoft. Le site personnel de Lesli Lamport est accessible en suivant cette adresse www.lamport.org.

La différence entre programmeur et codeur

En résumé sur la vidéo en haut, « la différence entre programmeur et codeur, c’est comme la différence entre l’écriture (L’écriture littéraire) et taper sur une machine à écrire », c’est l’expression de Lamport lui-même. C’est une différence énorme, essentiellement une personne doit d’abord apprendre à programmer avant de coder.

Cours sur l’assembleur ARM

Le langage assembleur est souvent considéré par les informaticiens  comme un  langage difficile, la première raison c’est qu’il existe plusieurs langages assembleurs très différents les uns des autres, en réalité chaque à processeur possède son propre assembleur. En plus ce sont des langages de bas niveau, très proches du langage machine binaire,  ça exige du programmeur une compréhension technique du fonctionnement du processeur et de l’architecture de la machine. Mine de rien le langage assembleur est très  populaire dans le domaine des systèmes embarqués, là où il faut bien optimiser son code et le rendre le plus rapide possible. La conception des pilotes des systèmes d’exploitation exige aussi souvent l’utilisation de l’assembleur  en raison  des spécificités intrinsèques de chaque matériel.  Sans oublier de mentionner aussi l’existence des extensions et fonctionnalités uniques pour chaque processeur qui ne sont généralement exploitables qu’à travers l’assembleur, comme par exemple les extensions du processeur Intel Pentium, comme MMX, SSE, et AVX, ou celle des processeurs AMD, l’extension 3Dnow. L’utilisation de l’assembleur est aussi très favorable pour les microcontrôleurs, ces petits microprocesseurs qui sont le plus souvent inclus à l’intérieur des appareils électroniques.

L’assembleur du processeur ARM

Le cours sur la vidéo en haut concerne le processeur ARM, C’est un processeur très connu, d’ailleurs ils embarquent la quasi-totalité des téléphones portables actuels. La vidéo de la chaîne Youtube freeCodeCamp.org relate une bonne explication de la partie théorique complémentée par de la programmation dans la partie pratique.

La proche fin de la loi de Moore

Pour commencer, on va tout d’abord comprendre c’est quoi la loi de Moore ? Véritablement, ce n’est pas une loi à proprement dit, mais disons une spéculation ou une observation faite par Gordon Moore, le cofondateur de la firme d’Intel, dans laquelle il stipule que le nombre de transistors ou la densité des transistors dans une surface donnée des circuits intégrés doublerait tous les deux ans. Cette observation est souvent mise en avant pour démonter l’évolution plutôt spectaculaire de la technologie des circuits intégrés sur plus de 40 ans. Malheureusement, ces dernières années cette loi n’est pas à la rigueur comme pour les années précédentes, et sa courbe d’évolution tend à régresser. Plus encore, la vidéo de la chaîne Youtube Computerphile en bas, prouve que la limite physique est plutôt proche, puisque la trace sur silicium (silicon en Anglais) va plutôt atteindre une largeur proche de l’atome, et dans ce cas c’est plus les lois de la physique électronique classique qui vont être utilisées mais les lois de la physique quantique, ce qui va totalement changer la donne.

La fin de la loi de Moore

Introduction à Linux

Moi autant qu’enseignant, je ne sais pas si on va le répéter assez souvent pour nos étudiants, mais apprendre Linux est très important, surtout pour un étudiant en informatique, l’étudiant doit impérativement à un moment ou à un autre l’utiliser. Malgré que Microsoft Windows et Apple MacOS sont les systèmes d’exploitation les plus utilisés sur les ordinateurs de bureau et les portables de nos jours, mais à part ça, dans tous les autres secteurs, c’est l’OS (Operating System ou système d’exploitation en Anglais) GNU Linux qui prédomine de loin les autres systèmes, ça inclut les serveurs, le , les supercalculateurs, les systèmes embarqués, l’IoT (Internet of Things)…etc. La vidéo en bas est celle de la chaîne Youtube éducative FreeCodeCamp.org, c’est une excellente vidéo d’introduction aux bases du système d’exploitation Linux, surtout qu’elle se focalise sur le Terminal (ou les commandes textuelles) plutôt que sur l’interface graphique du système.

Apprendre Linux

La constante d’Euler

Il existe des constantes en mathématiques qui sont très connues, que tout étudiant a eu plusieurs fois dans son cursus l’opportunité de les utiliser. Personnellement, pour moi les trois constantes les plus communes sont, Pi, e et i, je pense que beaucoup de monde vont s’accorder pour dire que parmi ces trois constantes, c’est celle d’Euler (e) qui est la moins intuitive à comprendre et qu’elle est le plus souvent acquise sans compréhension exacte de son sens analytique, et mainte fois utilisée dans les formules mathématiques d’une manière disons machinale.

La constante d’Euler

La vidéo en haut de la chaîne YouTube Numberphile, essaye tant bien que mal, d’expliquer la nature de la constante d’Euler, parce que ce n’est pas facile, et elle n’est pas clairement discernable comparée aux autres constantes. Grossièrement parlant, la constante e a un rapport avec le taux de croissance de l’intérêt à travers le temps, par exemple, si vous gagnez disons 5% par jour, la croissance de votre fonds à travers le temps a un rapport avec la constante e, vous pouvez aussi trouver sur google des démonstrations analytique plus aboutis. Le plus marquant historiquement, c’est que cette constante était découverte par trois mathématiciens qui sont très connus académiquement, Bernoulli, Euler et Gauss, c’était pour eux une découverte lors d’un processus d’exploration mathématique.

Les plus importants protocoles sur Internet

Il est important pour tout informaticien d’avoir au minimum, un certain niveau de connaissance concernant les protocoles utilisés dans les réseaux informatiques. Les protocoles sont des mécanismes utilisés pour permettre la communication et le transfert d’information sur les réseaux informatiques et particulièrement sur Internet. La vidéo en bas traite exactement ce point en particulier, elle commence par donner une définition formelle et précise de c’est quoi un protocole réseau, et fait le parcours des principaux protocoles à absolument connaître sans autant être un spécialiste réseau.

Protocoles d’Internet.

Les protocoles abordés sont : l’ARP, le FTP, le SMTP, le HTTP, le SSL, le TLS, le HTTPS, le DNS et le DHCP, ces 9 protocoles forment le backbone ou la colonne vertébrale responsable du fonctionnement d’Internet, la vidéo fait une légère démonstration de comment ces protocoles fonctionnent et interagissent entre eux lors de l’utilisation d’Internet. Un dernier mot concernant la chaîne YouTube Practical Networking de cette vidéo, que j’estime de bonne qualité académique pour faire l’appréciation et la vulgarisation des concepts et technologies utilisées dans les réseaux informatiques.