Linus Torvalds

Linus Torvalds, un grand nom dans l’informatique moderne, l’inventeur du fameux Linux, l’un des softwares les plus utilisés actuellement dans le monde, quoiqu’il ne prédomine pas dans le secteur des PC, sa diffusion dans le secteur des serveurs est colossal, le marché des tablettes et smartphones est de même notamment en relation avec système Android construit sur une base Linux, sans oublier les différents systèmes embarqués à base de Linux comme les téléviseurs, les consoles de jeux, les routeurs, les DVR…etc. Il aussi peu connu que Linus Torvalds est l’initiateur du logiciel de gestion de versions Git utilisé pour le développement distribué de logiciels sur des dépôts comme GitHub par exemple.

Linus Torvalds a fait une interview sur la vidéo en bas, organisée au sein d’une conférence pour la fondation TED, la fondation est responsable de la mise en ligne gratuitement d’interventions (talks en Anglais) par différents acteurs dans des domaines divers comme la science, la technologie, l’éducation, la politique…etc. Dans l’interview Linus Torvalds revient sur le déroulement de la création de Linux et de Git, sur son implication dans le monde et la philosophie open source parce que à l’époque c’était un peu par hasard, il parle de sa manière de travailler, de sa vision concernant l’innovation et l’invention et de tout autres choses. C’est une vidéo très riche sur homme qui l’est d’autant plus.

Interview de Linus Torvalds

Analyse hardware de la PlayStation 1

L’une des merveilles technologiques qu’a connu le monde vidéoludique dans son histoire est sans doute la PlayStation 1 de la marque Sony, pour ma part c’est la meilleure console de jeux vidéo de tous les temps. Sa sortie en 1994 a marqué un tournant technologique sans précédent, elle présentait des performances en 3D dépassant de loin son homologue PC, avec un prix 2 à 3 fois moins cher (pour rappel à l’époque de sa sortie les PC tournés encore sur Windows 3.11), une prouesse qui a ébloui toute personne concernée par la technologie. Et une question se posait, comment Sony avait réussi à produire un tel exploit technologique ?

La réponse de nos jours est désormais simple et bien connue, c’est en 2 mots; spécialisation et optimisation. La PlayStation d’un point de vue général n’était pas plus puissante que les PCs de l’époque, mais dans son domaine, en occurrence la 3D, elle était très très en avance, son architecture globalement était orientée vers le rendu 3D en optimisant au maximum les coûts des composants, les concepteurs ont voulu dès le début construire une architecture simple à programmer étant les début de la 3D, avec le moindre coût. Sur le diagramme en bas on peut avoir un aperçu de cette architecture.

Architecture de la PlayStation 1

Un très bon article (voici son lien,c’est aussi la source du diagramme) arrive à décortiquer d’une manière relativement détaillée l’architecture. On peut ainsi observer sur le diagramme que la PlayStation 1 dispose d’un processeur de 33.87 MHz dérivé de MIPS et implémentant le jeu d’instruction MIPS I (le même étudié dans le module Architecture des Ordinateur). Généralement MIPS dispose de 4 slots pour rajouter des Co-processeurs, le processeur de la PlayStation n’utilise que 2, le MMU (pour la gestion de mémoire virtuelle) et le GTE (Geometry Transformation Engine) module purement mathématique accélérant les calculs de transformation et des projections géométriques des polygones qui représente une bonne partie du moteur de rendu 3D. Sur le même silicone du processeur se trouve aussi un DMA (Direct Memory Access) automatisant et accélèrent le transfert de donnés entre différentes mémoires, et le MDEC (Motion Decoder) pour la lecture du flux vidéo, en raison que le processeur n’a pas assez de puissant pour le faire d’une manière logiciel, les processeurs actuels (de 4 à 5 GHz) peuvent le faire facilement et ne disposent pas forcément un composant dédié.

Le processeur est ensuite raccordé au bus sur le quel sont rattachés : une RAM de 2 Mo du type EDO RAM, le GPU (Graphics processing unit) responsable de l’affichage graphique, le SPU (Sound Processing Unit) l’unité responsable du son, le CD-ROM controller, le BIOS (Basic Input/Output System) sous forme d’une ROM de 512 Ko contenant principalement le programme de démarrage de la machine, et une interface pour la communication avec les manettes et les cartes mémoires. Le GPU de la PlayStation est relativement primitif, il ne peut essentiellement que dessiner des triangles, sachant que le triangle est la forme primitive élémentaire constituant une scène en 3D, la commande de dessiner un triangle et ses paramètres lui provient du processeur, il dispose d’une mémoire propre VRAM de taille 1 Mo. L’unité de son aussi dispose de 512 Ko de mémoire SRAM. L’image en bas illustre la carte-mère et la disposition physique des composants.

Carte-mère de la PlayStation 1

Voilà, on vient de faire un petit survol sur l’architecture de la PlayStation 1, je vous conseille fortement de lire l’article qui détail beaucoup plus l’architecture, (lien de l’article). Il est probable que je consacrerai dans le futur inchaallah un tutoriel bien plus détaillé et approfondi pour arriver au moins à implémenter des petits programmes sur la machine, ces petits programmes sont généralement appelés démos. En conclusion, il est facilement observable que l’architecture d’une PlayStation 1 et totalement différente d’un PC, on avait vu dans le module de l’Architecture des Ordinateurs que le PC suivait plus ou moins l’architecture de Von Neumann qui est relativement simple, alors que la PlayStation suit un modèle totalement différent, plus éparpillé et plus distribué éventuellement pour optimiser au-mieux les caractéristiques vidéoludique de la machine.

30 livres en informatique récents et totalement gratuits

Récemment l’éditeur Allemand de livres et de journaux scientifiques international Springer, bien connu dans les sciences et technologies a fait l’initiative de publier gratuitement une trentaine de livres informatiques très récents (de 2016 à 2019) sous format numérique, ça concerne plusieurs domaines informatiques, dont la programmation, l’intelligence artificielle, programmation système, programmation parallèle, sécurité réseaux, cryptographie, traitement d’images et beaucoup d’autres. La liste des livres et leurs liens respectifs sont sur la liste en bas :

Lien rassemblant la liste de tous les livres

Cheat-sheet pour le langage C

Personnellement le langage C avec le langage C++ sont mes deux langages de programmation préférés, et je suis très ravi que ça soit les principaux langages enseignés au sein de l’université. Lorsque j’étais étudiant je me rappelle avoir eu la fausse idée sur la relation entre le langage C et le langage C++, je pensais que le C++ est une évolution du C et qu’une fois le langage C++ maîtrisé je n’aurais plus besoin d’utiliser le langage C, alors qu’avec le temps je me suis aperçu que malgré que le C++ hérite beaucoup du langage C, ce sont deux langages très différents, le C est surtout un langage procédural structuré autour de la fonction, très populaire dans les domaines comme les systèmes embarqués (systèmes avec des ressources réduites) et les systèmes d’exploitation, d’ailleurs le noyau Linux est en grande partie écrit à base de C. En contrepartie le langage C++ est un langage orienté objet, plutôt populaire pour les applications complexes avec des exigences de performances et de robustesse, comme les programmes de simulation (ou programmes à calcul intensif), les programmes de contrôle industriel, les moteurs de jeux vidéos, les compilateurs…etc.

Lien du Cheat-sheet du langage C

Le lien ci-dessus est celui du cheat sheet pour le langage C, à vrai dire c’est plutôt un résumé sur le langage C avec de petites explications, des exemples…etc. C’est un excellent article pour se mémoriser rapidement tous les principaux concepts du langage, néanmoins ce n’est pas le meilleur pour débutant pour apprendre le langage à partir de zéro.

Routeurs, switchs et hubs

Il est bien connu que d’un point de vue académique les réseaux informatiques sont représentés comme un graphe au sens mathématique, donc plusieurs nœuds interconnectés par des liaisons pour transmettre l’information d’un nœud à l’autre. Les nœuds globalement sont de deux types; les terminaux, comme les PCs, les serveurs, les tablettes ou smartphones, formellement ce sont la source de l’information (serveurs) ou consommateurs d’information (PCs, téléphones). Et le deuxième type sont les nœuds internes de transmission et irrigation de l’information qui sont les routeurs, les switchs, et les hubs. Probablement un informaticien aura un jour ou l’autre à manipuler et utiliser ces dispositifs, il est important de bien saisir leurs manières de fonctionner, la vidéo suivante démontre en illustration la différence entre les trois dispositifs, avec les points forts et faibles de chacun. Cette vidéo est de l’excellente chaîne éducatif sur les technologies en informatique PowerCert.

Calcul géométrique de la multiplication et la racine carré

Il est étonnant aujourd’hui que la racine carrée est facilement calculée en utilisant la calculatrice ou d’autres appareils électroniques sophistiqués, mais serait-il possible pour quelqu’un de la calculer manuellement sans utiliser de machine, pour les informaticiens il existe les méthodes dites numériques permettant de la calculer avec des opérations simples comme l’addition, la soustraction, la multiplication, et la division. Il existe aussi d’autres méthodes mathématiques pour approximer sa valeur (voir wikipédia), néanmoins j’ai été étonné par la simplicité de la méthode géométrique démontrée dans la vidéo suivante, datant de l’époque de la Grèce antique la méthode est extrêmement facile ainsi que sa démonstration géométrique. La vidéo aussi présente une autre méthode aussi géométrique et simple pour calculer la multiplication.

Calcul géométrique de la racine carrée

État de l’art sur les processeurs

La vidéo suivante est produite par la chaîne Youtube Computerphile, une excellente chaîne de se spécialisant sur diverses technologies en informatique. La vidéo est animé par le Docteur Steve Bagley (le lien de son site personnel) de l’université de Nottingham en Angleterre, il fait la présentation d’un état de l’art sur le fonctionnement externe et interne des processeurs (CPU). La présentation touche des concepts importants dans l’Architecture des Ordinateurs comme l’architecture de Von neumann, l’interaction CPU-RAM, l’exécution des instructions à travers les compartiments internes du CPU, dont Fetch, Decode, Execute, l’exécution en pipeline et le phénomène du pipeline hazard (ou risques du pipeline), qui exige un traitement spécifique pour certaines instructions.

À l’intérieur du CPU

L’introduction du cours deep-learning de MIT

Une introduction en vidéo fracassante et spectaculaire du cours de deep-learning de l’université de MIT pour cette année, l’enseignant a eu avec cette introduction de bien faire comprendre aux étudiants de quoi s’agit-il et les projections effectifs des connaissances de ce cours.

introduction au cours de deep-learning de MIT

Pour rappel, le deep-learning est une branche du machine-learning elle-même une sous-classe du domaine de l’inintelligence artificielle. On peut facilement observer que de nos jours c’est l’intelligence la plus avancée et la prometteuse en comparaison aux autres intelligences.

Cours sur les structures de données

La vidéo suivante concerne les structures de données, c’est une très bonne vidéo dans le domaine de l’algorithmique, celle-ci est produite par un ingénieur de Google du nom de William Fiset (voici sa chaine Youtube). La vidéo prend en tout plus de 8 heures, parcourant les concepts et les modèles de structures de données les plus connus d’une façon croissante, du plus simple commençant par les tableaux aux plus complexes terminant par les files à priorité indexées.

Structures de données

Dans sa globalité, la narration est très bonne, comme toutes les vidéos de la chaine Youtube du site FreeCodeCamp.org d’ailleurs. Le narrateur aborde ces concepts qui sont le plus souvent complexes, d’une façon structurée avec un rythme constant et soutenu d’accroissement de difficulté de telle sorte que l’auditeur arrive à suivre sans difficulté. Néanmoins ça reste de l’algorithmique et ça demande toujours des pauses pour des temps de réflexion.

Le langage utilisé pour l’implémentation de ces concepts est le Java, et personnellement j’ai trouvé ça désolant, le langage C ou C++ aurait été plus approprié à mon avis, sachant que ces deux langages permettent d’accentuer l’analyse sur les notions comme les pointeurs et la gestion dynamique de la mémoire qui sont cachés et faite d’une manière automatique par Java.

Il est aussi important de dire que la vidéo représente effectivement un parcours relativement approfondi sur les structures de données, mais pour bien maîtriser ces concepts, elle ne peut en aucun cas replacer la pratique par plusieurs exercices et l’implémentation réel de plusieurs programmes sur machine, et surtout faire face à de vraies erreurs de programmation et avoir à faire potentiellement du débogage sur les programmes, qui sont très bénéfiques pour ce genre de concepts.

Le compilateur online OnlineGDB.com

Le site web OnlineGDB.com, est l’un des plus connu service sur le cloud qui permet d’offrir un compilateur et un environnement de développement (IDE) aux programmeurs pour une vaste gamme de langage de programmation dont: C, C++, Java, Python, C#, PHP, Ruby, VB, Perl, Swift, Prolog, Javascript, Pascal, HTML, CSS,…etc. il permet de faire l’édition de texte, la compilation, l’édition de liens, l’exécution, le débogage,…etc. Ainsi que la sauvegarde online, le partage de code source, le téléchargement des sources…etc.

description de OnlineGDB.com

Au final, on peut dire que ce service online permet d’offrir un environnement de développement simpliste pour un énorme éventail de langages de programmation, c’est pratique pour faire des tests de langages ou faire des programmes de taille réduite pour les étudiants, mais ne peut en aucun cas rivaliser avec un vrai environnement de développement qui est généralement beaucoup plus riche et adapté pour les gros projets.