Articles sur Blog

C++ cheat sheet

Voici un cheat sheet pour le langage C++, avec en plus un quick reference qui est plus détaillé et plus approfondie. Pour rappel un cheat sheet est un résumé concis pour un langage ou une librairie ou une technologie donnée. Son principal intérêt est de permettre aux programmeurs de se rappeler rapidement de tous les mécanismes avec leurs syntaxes, utilisés par le langage ou la bibliothèque. Il est de coutume de voir les cheat sheet imprimés en grand format et plaqués sur le mur du bureau de travail, à raison avoir l’accès à coups d’œil. Voici en bas sous format PDF le cheat sheet (la source du PDF).

Cpp_Quick_Referece

Les quick reference sont à peu près la même chose, parfois ils sont plus détaillés et présentent des définitions un peu plus approfondies. Mais il faut bien savoir que les cheat sheet et les quick reference ne sont pas utilisés pour apprendre un langage. Ils sont le plus souvent utilisés comme un appui mémoriel pour une personne qui maîtrise déjà le langage. Mine de rien, sur une certaine mesure, ça peut être bénéfique pour une personne qui veut apprendre le langage, ça lui permettra d’avoir une vision globale, ou une carte globale du langage, qui peut utiliser pour s’orienter et cadrer son processus d’apprentissage. Le PDF du quick reference est présenté en bas (la source du PDF).

CPP_Cheatsheet

Simple simulateur physique d’un moteur à combustion

J’ai eu personnellement l’occasion dans le passé de jouer à quelques simulateurs de voiture, ces jeux prétendent l’implémentation d’une physique la plus proche possible de la physique réelle des voitures de course. Mais à ma connaissance, les parties internes de la voiture ne sont pas réellement simulées, mais plutôt décrites par des modèles mathématiques qui vont le plus possible approximer le comportement global de la physique d’une voiture. Ce qui est proposé dans cette vidéo est une autre approche, puisque les compartiments internes sont reproduits dans la simulation. En réalité, seul le moteur a été reproduit, mine de rien, c’est l’élément de loin le plus complexe et le plus influent dans la physique d’une voiture.

L’idée initiale du créateur de ce simulateur était de reproduire le son d’un moteur d’une manière procédurale pour qu’il soit le plus fidèle possible au son réel des engins à combustion. Mais clairement avec la démonstration sur la vidéo de la simulation physique, ça pourrait facilement trouver dans d’autres domaines d’utilisation. C’est vrai que la simulation physique ici n’est pas aussi pertinente qu’un simulateur s’exécutant sur un supercalculateur, avec une énorme équipe de développeurs et des millions de lignes de code, mais ça reste un simulateur relativement précis et rigoureux, puisque selon le créateur, ça a abouti à plusieurs publications scientifiques. Et surtout son code reste relativement léger, ce qui lui permet probablement la possibilité d’être intégré dans des applications grand public comme, les jeux de course, les simulateurs de voitures sur PC, simulateur d’apprentissage mécanique…etc. Vous pouvez tester le simulateur et voir son code source sur le dépôt GitHub du développeur.

Simulateur physique d’un moteur à combustion

Les meilleurs langages de programmation à apprendre en 2022

Faire un classement des meilleurs langages de programmation n’est pas une mince affaire, le problème c’est qu’il est impossible d’appliquer une métrique universelle pour comparer les langages. Chaque langage possède ses propres avantages et ses propres inconvénients, et souvent ils diffèrent les uns des autres selon le type d’applications visées ou en rapport avec un domaine technologique précis. Par exemple, il y a des langages pour le développement web, le cloud, les systèmes embarqués, les systèmes distribués, les systèmes d’exploitation, les bases de données, les jeux vidéo, les applications scientifiques…etc.

Pour exclure toute subjectivité, on va se servir des résultats d’un sondage fait par le site web StackOverflow. Ce site web est très connu pour les informaticiens, il est fort probable que si vous faites du codage et que vous avez cherché la solution d’un problème en programmation sur Google, de le trouver parmi les premières réponses. Ce sondage a été fait sur la communauté de StackOverflow, et le nombre de participants est vraiment conséquent, le sondage aurait inclus pas moins de 70000 participants.

La liste des langages les plus utilisés pour l’année 2022 est comme suite (Lien du sondage pour plus de détails) : 

  1. JavaScript
  2. HTML/CSS
  3. SQL
  4. Python
  5. TypeScript
  6. Java
  7. Bash/Shell
  8. C#
  9. C++
  10. PHP
  11. C
  12. PowerShell
  13. Go
  14. Rust
  15. Kotlin

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

Le MOOC va-t-il révolutionner l’éducation ?

Par définition le MOOC (pour Massive Open Online Course) est un cours ou une formation donner à distance sur le web en utilisant des technologies diverses, parmi elles, les plus classiques comme les vidéos de cours, le format textuel de cours, les exercices, les examens…etc., en plus des outils communautaires qui vont faciliter l’interaction entre l’enseignant et les étudiants, comme les forums de discussions, les réseaux sociaux, les applications de communication visioconférence…etc.
Les MOOC ont tout d’abord émergé de la recherche scientifique, pour ensuite devenir populaire avec la pandémie, mais la question cruciale et de savoir est-ce que ça va vraiment révolutionner l’éducation ? À travers l’histoire cette prédiction était avancée pour plusieurs technologies auparavant, par exemple avec l’invention de la télévision ça a été prédit que ça va révolutionner l’éducation, ou encore avec l’apparition des micro-ordinateurs, ou d’internet. Mais jusqu’à aujourd’hui le seul dispositif pour l’éducation qui perdure reste une classe avec un groupe d’étudiants et un enseignant. Beaucoup de chercheurs pensent qu’il serait trompeur de visualiser l’éducation comme un simple processus de transmission de l’information vers l’apprenant, mais il faut rajouter en plus à cette perception l’aspect social qu’offre une classe de plusieurs personnes.
Les technologies comme internet, les ordinateurs, les tablettes, les smartphones, et la facilité d’accès numérique à l’information est un atout majeur pour l’éducation, mais en contrepartie l’aspect social de la vie d’un étudiant et d’autant aussi plus important.

L’avenir va nous dire comment l’éducation va évoluer, mais pour l’instant on va en profiter au maximum des ressources numériques comme les MOOC, l’adresse du site en bas donne un accès exhaustif des différents cours online que ça soit payant ou gratuit touchant pratiquement tous les domaines de l’éducation.

www.mooc-list.com

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.