Journal
Ce journal contient 13 entrées.
Blog Stéphane Bortzmeyer: Le principe de robustesse, une bonne ou une mauvaise idée ?
Le principe de Postel est très connu dans le monde des protocoles réseaux : "Soyez rigoureux dans ce que produisez, soyez compréhensif avec ce qui vient des autres".
L'objectif de ce principe consiste à maximiser le respect des standards, tout en introduisant une certaine robustesse envers les erreurs mineures et prévisibles qui pourraient exister dans les différentes implémentations.
Malheureusement, ce principe est mal compris, ou plutôt poussé à son extrême : des mécanismes complexes sont mis en œuvre pour résister à des erreurs hypothétiques, ce qui amène les développeurs à se montrer moins rigoureux et à faire émerger ces erreurs. Et une fois que ces erreurs deviennent une habitude, toute nouvelle implémentation se doit de gérer ces erreurs là.
En ce qui me concerne, j'applique le principe de Postel uniquement pour les erreurs évidentes (espaces en trop, par exemple) ou pour les erreurs faciles à détecter/corriger (valeurs oubliées). Hors de question de mettre en place des heuristiques complexes telles que celles implémentées par les navigateurs pour afficher du contenu à tout prix.
Avec le temps, je me rends compte aussi que le principe de Postel tend à être incompatible avec le principe "fail fast", qui consiste à dire qu'une erreur devrait survenir le plus tôt possible (et donc que, justement, un programme ne devrait pas chercher à corriger ou à ignorer les erreurs, mais plutôt échouer rapidement et de manière visible. En effet, l'existence d'une erreur est justement le signe que quelque chose ne va pas, et qu'il y a probablement des soucis en amont. Faire remonter ces erreurs permet de mettre en évidence ces soucis et de les corriger une bonne fois pour toute.
L'objectif de ce principe consiste à maximiser le respect des standards, tout en introduisant une certaine robustesse envers les erreurs mineures et prévisibles qui pourraient exister dans les différentes implémentations.
Malheureusement, ce principe est mal compris, ou plutôt poussé à son extrême : des mécanismes complexes sont mis en œuvre pour résister à des erreurs hypothétiques, ce qui amène les développeurs à se montrer moins rigoureux et à faire émerger ces erreurs. Et une fois que ces erreurs deviennent une habitude, toute nouvelle implémentation se doit de gérer ces erreurs là.
En ce qui me concerne, j'applique le principe de Postel uniquement pour les erreurs évidentes (espaces en trop, par exemple) ou pour les erreurs faciles à détecter/corriger (valeurs oubliées). Hors de question de mettre en place des heuristiques complexes telles que celles implémentées par les navigateurs pour afficher du contenu à tout prix.
Avec le temps, je me rends compte aussi que le principe de Postel tend à être incompatible avec le principe "fail fast", qui consiste à dire qu'une erreur devrait survenir le plus tôt possible (et donc que, justement, un programme ne devrait pas chercher à corriger ou à ignorer les erreurs, mais plutôt échouer rapidement et de manière visible. En effet, l'existence d'une erreur est justement le signe que quelque chose ne va pas, et qu'il y a probablement des soucis en amont. Faire remonter ces erreurs permet de mettre en évidence ces soucis et de les corriger une bonne fois pour toute.
Writing a Simple Operating System from Scratch, by Nick Blundell
Les systèmes d'exploitation sont des composants fondamentaux de nos ordinateurs, qui gèrent le matériel et fournissent aux utilisateurs des abstractions de haut niveau pour interagir avec celui-ci.
Ce document introduit, en "seulement" 77 pages, les concepts fondamentaux d'un système d'exploitation au niveau le plus bas : boot, gestion des entrées-sorties (souris, clavier, écran, etc.), système de fichier, processus, etc.
Tant qu'on est à parler de systèmes d'exploitation, la référence incontournable de ce domaine reste le livre "Operating System" d'Andrew S. Tanenbaum, le concepteur du micro-noyau de MINIX
http://fr.wikipedia.org/wiki/Andrew_Tanenbaum
Le livre de Tanenbaum est un pavé (>500 pages) très bien écrit et la traduction en français, "Systèmes d'exploitation", est de bonne qualité elle aussi. Le livre aborde l'ensemble des aspects d'un OS : gestion de la mémoire (adressage, pagination, etc.), gestion des entrées-sorties et des périphériques, systèmes de fichier, multi-tâche (thread, processus, ordonnancement, IPC), etc.
Des sujets connexes sont aussi traités, comme l'encodage et le décodage audio-vidéo, la compression, la virtualisation, la sécurité, etc.
D'ailleurs, coïncidence rigolote, Tanenbaum donnera une conférence sur MINIX3 à l'UPMC (campus de Jussieu) le 28 octobre prochain : http://colloquium.lip6.fr/Tanenbaum-2014-10-28
La conférence est destinée à un public large, ouverte à tous, et se tiendra en anglais.
Ce document introduit, en "seulement" 77 pages, les concepts fondamentaux d'un système d'exploitation au niveau le plus bas : boot, gestion des entrées-sorties (souris, clavier, écran, etc.), système de fichier, processus, etc.
Tant qu'on est à parler de systèmes d'exploitation, la référence incontournable de ce domaine reste le livre "Operating System" d'Andrew S. Tanenbaum, le concepteur du micro-noyau de MINIX
http://fr.wikipedia.org/wiki/Andrew_Tanenbaum
Le livre de Tanenbaum est un pavé (>500 pages) très bien écrit et la traduction en français, "Systèmes d'exploitation", est de bonne qualité elle aussi. Le livre aborde l'ensemble des aspects d'un OS : gestion de la mémoire (adressage, pagination, etc.), gestion des entrées-sorties et des périphériques, systèmes de fichier, multi-tâche (thread, processus, ordonnancement, IPC), etc.
Des sujets connexes sont aussi traités, comme l'encodage et le décodage audio-vidéo, la compression, la virtualisation, la sécurité, etc.
D'ailleurs, coïncidence rigolote, Tanenbaum donnera une conférence sur MINIX3 à l'UPMC (campus de Jussieu) le 28 octobre prochain : http://colloquium.lip6.fr/Tanenbaum-2014-10-28
La conférence est destinée à un public large, ouverte à tous, et se tiendra en anglais.
Gossip Algorithms (2008)
Un bon livre sur les algorithmes de "gossiping" (gossip = rumeur), qui servent à propager des messages dans les réseaux pair-à-pair mobiles par exemple.
Ces types de réseaux sont des ensembles non structurés de machines disposant d'une ou de plusieurs liaisons sans fil, et qui communiquent entre elles de manière opportuniste lorsqu'elles sont à proximité. La structure du réseau (routes, propagation des messages, etc.) émerge alors au fur et à mesure des interactions.
Evidemment, de nouveaux problèmes apparaissent avec ce type de réseaux : problèmes de routage, mobilité, communication sporadique, etc.
D'où le grand nombre de techniques et d'algorithmes spécifiques à ces réseaux.
Le livre est en accès libre, mais je fais une sauvegarde ici :
http://benjaminbillet.fr/media/gossipbook.pdf
Ces types de réseaux sont des ensembles non structurés de machines disposant d'une ou de plusieurs liaisons sans fil, et qui communiquent entre elles de manière opportuniste lorsqu'elles sont à proximité. La structure du réseau (routes, propagation des messages, etc.) émerge alors au fur et à mesure des interactions.
Evidemment, de nouveaux problèmes apparaissent avec ce type de réseaux : problèmes de routage, mobilité, communication sporadique, etc.
D'où le grand nombre de techniques et d'algorithmes spécifiques à ces réseaux.
Le livre est en accès libre, mais je fais une sauvegarde ici :
http://benjaminbillet.fr/media/gossipbook.pdf
Le mythe de la qualité de service sur Internet
On voit circuler sur le net cette excellente vidéo à propos de la neutralité du net, qui traite du problème avec humour sans se perdre dans des considérations techniques ou philosophiques : http://www.dailymotion.com/video/x1ybocf_john-oliver-hbo-neutralite-du-net-vostfr_tech
Le principe de neutralité se résume simplement de la manière suivante: un fournisseur d'accès doit traiter toutes les données de la même façon, quelle que soit leur origine, leur destination ou leur contenu.
Un tel principe est fondamental car il permet d'éviter qu'un fournisseur d'accès puisse forcer une entreprise, un gouvernement ou un individu à payer plus cher pour pouvoir accéder et/ou fournir des services spécifiques. C'est grâce à un tel principe que vous ne payez pas plus cher en regardant une vidéo sur le net, ou qu'une petite entreprise du Web peut rivaliser avec une grande sans avoir à investir de très grandes sommes d'argent (barrière à l'entrée).
On trouve cependant encore des gens qui justifient la fin de ce principe pour les raisons suivantes:
- certains protocoles (transport de la voix et de la vidéo, par exemple) nécessitent un minimum de bande passante pour pouvoir fonctionner.
- certains services sont fondamentaux et ne devraient pas souffrir des ralentissements due à une surcharge du réseau (paiement des impôts en ligne, accès aux serveurs gouvernementaux, etc.).
Ces raisons, légitimes au premier abord, sont en fait liées à l'absence de garanties offertes par les fournisseurs d'accès quant à la capacité de leurs infrastructures. En effet, le débit réel d'une ligne dépend du débit de l'infrastructure sous-jacente et du nombre de personnes à l'utiliser (car cette infrastructure est partagée entre tous les utilisateurs).
Les fournisseurs d'accès considèrent cependant que tout le monde n'utilise pas sa connexion en permanence au débit maximum, et surestiment donc le nombre d'utilisateurs que cette infrastructure peut supporter.
Cependant, tout comme une banque fait faillite lorsque la totalité de ses clients veut retirer son argent, le débit par personne s'effondre si tout le monde essaye d'utiliser sa connexion au maximum au même moment. D'où les dégradations de performance aux heures de grande affluence que l'on peut observer chez soi (en soirée et le weekend, notamment).
En d'autres termes, les fournisseurs d'accès refusent d'appliquer une forme de QoS basée sur des garanties de débit par personne, tout simplement parce que cela reviendrait soit à accepter moins d'abonnés, soit à améliorer l'infrastructure de manière adéquate. Des raisons purement financières, donc.
Par contre, les fournisseurs d'accès militent pour la disparition de la neutralité du net, sous prétexte d'assurer cette fameuse qualité de service qu'ils refusent de garantir actuellement. C'est à dire qu'au lieu d'assurer à chaque client (particulier ou professionnel) une portion de bande passante minimale cohérente vis à vis de leurs usages, les fournisseurs d'accès préféreraient pouvoir rejeter les données provenant de/à destination de ceux qui ne payent pas un supplément substantiel.
En résumé, donc, le but des fournisseurs d'accès est de pouvoir gagner plus d'argent sans investir outre mesure dans l'infrastructure, d'une part en faisant payer plus chers l'accès à certains services et d'autre part en menaçant toute entreprise proposant un service sur Internet de dégrader leurs performances sur le réseau.
Alors, à ceux qui pensent que la QoS est nécessaire sur Internet, je réponds "non, pas du tout". Ce qui est nécessaire, voire fondamental, c'est un investissement approprié dans les infrastructures, une quantification réaliste du nombre d'utilisateurs supportés par cette même infrastructure, et la fin de l'open bar généralisé sur l'accès à Internet.
A noter que, depuis 2007, la loi oblige les fournisseurs d'accès à préciser un débit minimum garanti dans leur contrat de vente : http://juriscom.net/2007/11/cassation-civ-1-8-novembre-2007-societe-aol-c-associations-ufc-que-choisir-afa/
Évidemment, les fournisseurs d'accès ont modifiés leurs contrats en indiquant des débits minimums garantis ridiculement faibles, de l'ordre du 56K pour de l'ADSL (10Mbps pour de la fibre), sachant qu'il serait de toute façon très difficile pour l'utilisateur lambda de prouver un éventuel non respect de cette clause.
Le principe de neutralité se résume simplement de la manière suivante: un fournisseur d'accès doit traiter toutes les données de la même façon, quelle que soit leur origine, leur destination ou leur contenu.
Un tel principe est fondamental car il permet d'éviter qu'un fournisseur d'accès puisse forcer une entreprise, un gouvernement ou un individu à payer plus cher pour pouvoir accéder et/ou fournir des services spécifiques. C'est grâce à un tel principe que vous ne payez pas plus cher en regardant une vidéo sur le net, ou qu'une petite entreprise du Web peut rivaliser avec une grande sans avoir à investir de très grandes sommes d'argent (barrière à l'entrée).
On trouve cependant encore des gens qui justifient la fin de ce principe pour les raisons suivantes:
- certains protocoles (transport de la voix et de la vidéo, par exemple) nécessitent un minimum de bande passante pour pouvoir fonctionner.
- certains services sont fondamentaux et ne devraient pas souffrir des ralentissements due à une surcharge du réseau (paiement des impôts en ligne, accès aux serveurs gouvernementaux, etc.).
Ces raisons, légitimes au premier abord, sont en fait liées à l'absence de garanties offertes par les fournisseurs d'accès quant à la capacité de leurs infrastructures. En effet, le débit réel d'une ligne dépend du débit de l'infrastructure sous-jacente et du nombre de personnes à l'utiliser (car cette infrastructure est partagée entre tous les utilisateurs).
Les fournisseurs d'accès considèrent cependant que tout le monde n'utilise pas sa connexion en permanence au débit maximum, et surestiment donc le nombre d'utilisateurs que cette infrastructure peut supporter.
Cependant, tout comme une banque fait faillite lorsque la totalité de ses clients veut retirer son argent, le débit par personne s'effondre si tout le monde essaye d'utiliser sa connexion au maximum au même moment. D'où les dégradations de performance aux heures de grande affluence que l'on peut observer chez soi (en soirée et le weekend, notamment).
En d'autres termes, les fournisseurs d'accès refusent d'appliquer une forme de QoS basée sur des garanties de débit par personne, tout simplement parce que cela reviendrait soit à accepter moins d'abonnés, soit à améliorer l'infrastructure de manière adéquate. Des raisons purement financières, donc.
Par contre, les fournisseurs d'accès militent pour la disparition de la neutralité du net, sous prétexte d'assurer cette fameuse qualité de service qu'ils refusent de garantir actuellement. C'est à dire qu'au lieu d'assurer à chaque client (particulier ou professionnel) une portion de bande passante minimale cohérente vis à vis de leurs usages, les fournisseurs d'accès préféreraient pouvoir rejeter les données provenant de/à destination de ceux qui ne payent pas un supplément substantiel.
En résumé, donc, le but des fournisseurs d'accès est de pouvoir gagner plus d'argent sans investir outre mesure dans l'infrastructure, d'une part en faisant payer plus chers l'accès à certains services et d'autre part en menaçant toute entreprise proposant un service sur Internet de dégrader leurs performances sur le réseau.
Alors, à ceux qui pensent que la QoS est nécessaire sur Internet, je réponds "non, pas du tout". Ce qui est nécessaire, voire fondamental, c'est un investissement approprié dans les infrastructures, une quantification réaliste du nombre d'utilisateurs supportés par cette même infrastructure, et la fin de l'open bar généralisé sur l'accès à Internet.
A noter que, depuis 2007, la loi oblige les fournisseurs d'accès à préciser un débit minimum garanti dans leur contrat de vente : http://juriscom.net/2007/11/cassation-civ-1-8-novembre-2007-societe-aol-c-associations-ufc-que-choisir-afa/
Évidemment, les fournisseurs d'accès ont modifiés leurs contrats en indiquant des débits minimums garantis ridiculement faibles, de l'ordre du 56K pour de l'ADSL (10Mbps pour de la fibre), sachant qu'il serait de toute façon très difficile pour l'utilisateur lambda de prouver un éventuel non respect de cette clause.
Guide to MongoDB for startups
Une introduction à MongoDB et son fonctionnement général (stockage, réplication, concurrence, etc.).
Anatomy of a Program in Memory
Comme le dit l'auteur, la gestion de la mémoire c'est le coeur des systèmes d'exploitation.
Formule autoréférente de Tupper - Wikipédia
Lorsque l'on trace l'ensemble des couples (x,y) qui satisfont cette inégalité, une partie du plan représente la formule elle-même.
Description détaillée : http://p3.storage.canalblog.com/36/80/210892/67522113.png
Description détaillée : http://p3.storage.canalblog.com/36/80/210892/67522113.png
Divide a number by 3 without using *, /, +, -, % operators
Comment diviser un nombre par trois en utilisant uniquement quelques opérateurs de base. C'est toujours intéressant de voir une utilisation concrète des opérateurs binaires, qui sont finalement assez peu utilisés pour du développement usuel.
Quel intérêt demanderont certains ? Eh bien, ces opérateurs sont moins coûteux (un décalage de bit est bien plus rapide qu'une division par deux, par exemple) et ce type d'optimisation est souvent utilisé pour implémenter des décodeurs vidéos ou des moteurs 3D, par exemple.
A noter, toutefois, que les compilateurs sont aujourd'hui très efficaces et introduisent eux-mêmes ce genre d'optimisations.
Et sinon, il y a simplement la beauté du geste :).
Quel intérêt demanderont certains ? Eh bien, ces opérateurs sont moins coûteux (un décalage de bit est bien plus rapide qu'une division par deux, par exemple) et ce type d'optimisation est souvent utilisé pour implémenter des décodeurs vidéos ou des moteurs 3D, par exemple.
A noter, toutefois, que les compilateurs sont aujourd'hui très efficaces et introduisent eux-mêmes ce genre d'optimisations.
Et sinon, il y a simplement la beauté du geste :).
"Yoda Conditions", "Pokémon Exception Handling" and other programming classics
Il y a beaucoup de vocabulaire "officieux" dans le monde de la programmation (yoda conditions, stringly typed, refuctoring, heisenbug, baklava code, etc.). Il s'agit souvent de critiquer de mauvaises pratiques en les nommant de manière humoristique.
Dans le genre, mais peut être moins drôle, il y a les antipatterns :
http://en.wikipedia.org/wiki/Anti-pattern
http://c2.com/cgi/wiki?AntiPattern
Dans le genre, mais peut être moins drôle, il y a les antipatterns :
http://en.wikipedia.org/wiki/Anti-pattern
http://c2.com/cgi/wiki?AntiPattern
Equations for Organic Motion
Quelques formules pour reproduire des mouvements "organiques".
Gecko Reflow Visualization
Une vidéo montrant la construction d'une page web par le moteur de rendu Gecko (Firefox).
Turtles, all the way down. Or gliders. Or glider turtles.
En référence à mon précédent lien, voici une version du jeu de la vie implémenté au moyen du jeu de la vie (recursive mind blown !). Il utilise pour cela une grille constituée de métapixels OTCA, une superstructure du jeu de la vie.
http://www.conwaylife.com/wiki/OTCA_metapixel
http://www.conwaylife.com/wiki/OTCA_metapixel
Jeu de la vie en espace continu
Pour ceux qui connaissent le jeu de la
vie (http://fr.wikipedia.org/wiki/Jeu_de_la_vie), cet automate cellulaire mis au point par John Conway au début des années 70, voilà une version implémentée non pas avec une grille mais avec un espace continu. Une présentation explique en détails la façon dont l'algorithme a été adapté :
http://www.youtube.com/watch?v=iyTIXRhjXII
Le résultat est assez impressionnant, on comprend beaucoup mieux l'appellation d'"automate cellulaire".
vie (http://fr.wikipedia.org/wiki/Jeu_de_la_vie), cet automate cellulaire mis au point par John Conway au début des années 70, voilà une version implémentée non pas avec une grille mais avec un espace continu. Une présentation explique en détails la façon dont l'algorithme a été adapté :
http://www.youtube.com/watch?v=iyTIXRhjXII
Le résultat est assez impressionnant, on comprend beaucoup mieux l'appellation d'"automate cellulaire".
Ce journal est basé sur Ginger, un gestionnaire de lien minimaliste développé dans le cadre d'un stage de perfectionnement. Pour plus d'informations, consulter le wiki consacré à mes projets personnels.