La récursivité comme solution pour le jeu du Sudoku

Le jeu du Sudoku est un jeu de puzzle populaire sur certains journaux et magazines, il est représenté sur l’image en bas, globalement il se constitue d’une grille de 9×9 cases partiellement remplies par des chiffres de 1 à 9, la grille est aussi subdivisée en 3×3 carré de 3×3 chiffres, le joueur doit remplir le reste des cases vides restantes en respectant la règle qu’il ne doit pas y avoir de répétition d’un chiffre sur une colonne, sur une ligne ou sur le carré 3×3.

Une grille vide de Sudoku

Les règles sont simples mais le casse-tête demande beaucoup de temps à l’humain pour le résoudre, et pourtant c’est déconcertant comment un programme d’une poignée de lignes de code arrive à résoudre le problème sur ordinateur en une fraction de seconde, dans la vidéo qui suit l’enseignant s’exulte de la magie de la récursivité, et c’est d’autant plus vrai que la récursivité est une technique de programmation réputée difficile à apprendre mais très efficace une fois maîtrisée. Il n’était par rare dans les examens d’algorithmique que j’ai eu à corriger de tomber sur des problèmes difficiles à résoudre par les méthodes conventionnelles (par boucles et tests) alors qu’ils devenaient très simples en récursivité.

résoudre le sudoku par récursivité

Services cloud gratuits pour développement de jeux vidéo

Pour rappel le cloud computing est une récente technologie consistant à offrir aux entreprises des services sur internet en IT (Information Technology: technologies en informatique). Ça permet aux entreprises au-lieu d’acheter du matériel et du logiciel et d’installer leurs propres infrastructures informatiques en local, de louer des services en IT proposé par d’autres entreprises tierces spécialistes dans la construction et le maintien de ce genre d’infrastructure. Les services loués par les entreprises sont variers et peuvent être catégorisés en 3 modèles, ça peut être des services au niveau infrastructure (appelés IaaS) comme la mise à disposition de serveurs, datacenters, du stockage, un réseau, des machines virtuelles…etc. Ou au niveau plate-forme (appelés PaaS) et ça inclut les systèmes d’exploitation, les bases de données, les serveurs web, les middlewares, les API de développement, le monitoring…etc. Ou-bien au niveau application (appelés SaaS), ça permet aux entreprises d’installer leurs applications à distances et de les utiliser à distance, en assurant la gestion des bases de données et les backups (les sauvegardes) par l’entreprise tierce. Les entreprises offrants ce genres de services sont généralement appelés cloud computing service providers et sont généralement des filiales de célèbres firmes d’IT, parmi eux on peut nommer AWS (Amazon Web Services) d’Amazon, ou encore Microsoft Azure, Google Cloud Platform, IBM cloud…etc.

Image du jeu Fortnite

Les services offerts gratuitement pour le développement de jeux vidéo sont de la part de la société EPIC games, c’est exceptionnel dans le fait que les services sont généralement payants d’autant plus que les services pour jeux vidéo sont assez rare. EPIC games est une firme très ancienne et très connue dans le monde vidéoludique, actuellement elle est surtout connue pour le très célèbre jeu Fortnite (image en haut) ou de leurs moteur de jeu Unreal Engine réputé pour ça puissance graphique (image de son interface en bas). Mais le plus étonnant c’est les récentes actions très particulières de la firme, par exemple l’année dernière elle a offert 1,2 millions de dollars à la fondation open source Blender Fondation pour subventionner le logiciel de modélisation en 3d Blender (plus de détails sur l’article), ou la subvention aussi par 250 milles dollars du moteur de jeu open source Godot (plus de détails sur l’article) pratiquement un concurrent direct pour son moteur Unreal. Récemment aussi EPIC games sous période de confinement a eu l’idée d’agoniser plusieurs événements virtuels sur son jeu Fortnite, et le résultat est un nouveau record mondial de prêt de 28 millions de participants, c’est évident qu’il est impossible d’organiser des événement de cette envergure dans le monde réel, d’ailleurs d’après ce phénomène beaucoup de personne motionnaient les prémices du web 3.0, un web totalement virtuel dans lequel avec un avatar l’internaute peur évoluer. Sans oublier la récente mesure du moteur Unreal Engine entamée envers les développeurs indépendants (indie en Anglais, se sont des développeurs avec un revenu et un capital très faible, souvent c’est un unique développeur qui travail depuis sa maison), la mesure permet à ces développeurs d’utiliser gratuitement le moteur et de publier leurs jeux sans aucune redevance (royalties en Anglais) jusqu’à ce que le jeu dépasse en profit la bar d’un million de dollars.

L’interface du moteur de jeu Unreal

Concrètement les services d’EPIC games offrent aux développeurs le backend pour le déploiement en réseau des jeux en multijoueurs, ainsi ces services ne concernent réellement que les jeux en réseau et pas en local. Le backend est sous forme d’une API permettant la gestion de l’infrastructure réseau hébergeant le jeu, ces sévices facilitent grandement la vie des développeurs, parce que autrement le développeur devrait les gérer lui-même et ça implique beaucoup de travail de programmation, la location de serveurs et le maintien de ces derniers. En parcourant la page officielle des services sur le site d’EPIC games on peut énumérer quelques services proposés par le cloud d’EPIC, comme le matchmaking pour organiser des matches entre plusieurs joueurs, la création de Lobbies qui sont des zones virtuelles où les joueurs peuvent bavarder, s’inviter pour des matches, ou chercher d’autres joueurs, le suivi des statiques des joueurs, les services d’authentification et la gestion de la liste d’amis, sauvegarde, création de canaux peer-to-peer…etc. Sans oublier que cette API est accessible sur n’importe quel moteur de jeu et peut-être intégrer sur différentes plate-formes de jeu comme la plate-forme de PlayStation, Xbox ou Steam.

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.