Journal
Ce journal contient 354 entrées.
Page 2 / 8
Blog Stéphane Bortzmeyer: RFC 7616: HTTP Digest Access Authentication
Moralité : peu importe que vous utilisiez le mécanisme d'identification/authentification Basic ou Digest, TLS est requis pour éviter (i) les attaques de l'homme du milieu, (ii) la transmission en clair du contenu autorisé.
Qui plus est, ces mécanismes d'identification/authentification HTTP ne gérent pas d'état : il n'est pas possible pour le serveur de forcer l'utilisateur à se réauthentifier et il n'est pas non plus possible pour le client de se déconnecter (lire http://www.bortzmeyer.org/7235.html). En pratique, il vaut donc mieux privilégier un formulaire Web pour la saisie du mot de passe, puis un cookie/clé de session associée à chaque requête.
Qui plus est, ces mécanismes d'identification/authentification HTTP ne gérent pas d'état : il n'est pas possible pour le serveur de forcer l'utilisateur à se réauthentifier et il n'est pas non plus possible pour le client de se déconnecter (lire http://www.bortzmeyer.org/7235.html). En pratique, il vaut donc mieux privilégier un formulaire Web pour la saisie du mot de passe, puis un cookie/clé de session associée à chaque requête.
Blog Stéphane Bortzmeyer: Un bel exemple de logiciels de sécurité dangereux
L'interception TLS est une technique permettant aux antivirus ou aux proxy d'entreprise de déchiffrer les flux TLS. Par exemple, un antivirus va ajouter son autorité de certification à la base des autorités de confiance maintenue par le système. De cette façon, l'antivirus peut forger de faux certificats valides pour les domaines visités et, de fait, intercepter le trafic chiffré.
Grâce à cela, l'antivirus peut vérifier que les flux chiffrés ne sont pas émis par un logiciel malveillant. Dans le cas des proxy d'entreprise, cela permet de vérifier les communications qui sortent de l'entreprise.
Cette technique est un détournement délibéré du modèle de sécurité de TLS et doit donc être implémentée de façon irréprochable pour ne pas compromettre la sécurité. Des chercheurs viennent de montrer qu'un grand nombre de ces logiciels ne sont pas irréprochables et possèdent des failles graves.
Grâce à cela, l'antivirus peut vérifier que les flux chiffrés ne sont pas émis par un logiciel malveillant. Dans le cas des proxy d'entreprise, cela permet de vérifier les communications qui sortent de l'entreprise.
Cette technique est un détournement délibéré du modèle de sécurité de TLS et doit donc être implémentée de façon irréprochable pour ne pas compromettre la sécurité. Des chercheurs viennent de montrer qu'un grand nombre de ces logiciels ne sont pas irréprochables et possèdent des failles graves.
Apache Mynewt
Apache Mynewt est un nouveau système d'exploitation temps réel pour les objets connectés (IoT) ayant des ressources très limitées. Supporte Bluetooth Low Energy pour la communication.
Roadmap: http://mynewt.apache.org/img/OS_arch.png
Roadmap: http://mynewt.apache.org/img/OS_arch.png
Linux workstation security checklist
Une liste de chose à vérifier pour améliorer la sécurité des postes de travail. Destiné plutôt aux administrateurs systèmes.
Sockets en C
Quelques documentations sur les sockets en C (bloquante, non bloquante, IPv6, etc.)
http://www.scottklement.com/rpg/socktut/tutorial.html
http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/chapter-section-using-api.html
http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html
http://mff.devnull.cz/pvu/src/tcp/
http://www.scottklement.com/rpg/socktut/tutorial.html
http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/chapter-section-using-api.html
http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html
http://mff.devnull.cz/pvu/src/tcp/
How to implement the discrete Fourier transform
Implémentation de la transformée de fourier discrète (DFT).
https://fr.wikipedia.org/wiki/Transformation_de_Fourier_discr%C3%A8te
https://github.com/cscheiblich/jwave
https://fr.wikipedia.org/wiki/Transformation_de_Fourier_discr%C3%A8te
https://github.com/cscheiblich/jwave
SpaceBook®
Carte interactive de la position des satellites. C'est impressionnant le nombre de satellites qui ne sont plus en fonctionnement.
Choosing an HTTP Status Code — Stop Making It Hard – Racksburg
Choisir ses codes HTTP pour une API REST. Quelques trucs sont sans doute sujet à débat, mais c'est un point de départ intéressant.
DeepMind AlphaGo vs Lee Sedol: AlphaGo 4 – Lee Sedol 1
J'étais complètement passé à côté de ça. Beaucoup de spécialistes pensaient qu'une machine capable de battre les humains au Go était impossible, car le nombre de possibilités à explorer est plus grand que pour les échecs.
C'est une (petite) victoire pour moi, car j'avais anticipé cette possibilité dès que je m'étais intéressé aux techniques utilisées pour les jeux d'échecs. Concrètement, le Go n'est pas différent des échecs : il se résout par une exploration systématique. Bien entendu, le nombre de possibilité est très grand, mais il aura suffit de limiter l'exploration systématique aux solutions les plus prometteuses, grâce à des techniques d'apprentissage artificiel.
Les algorithmes mis en œuvre dans AlphaGo sont très anciens (plus de 20 ans) et il apparaît que le seul élément qui manquait jusqu'à lors était un investissement massif de temps et d'argent (ici Google) pour entraîner ces algorithmes avec des dizaines de milliers de parties. Ce n'est donc qu'un hasard du calendrier si c'est aujourd'hui qu'une IA remporte une victoire (écrasante il faut bien le dire) au jeu de Go.
De la même façon, il est possible d'affirmer, sans trop de risques, que TOUS les jeux à exploration systématique peuvent être attaqués avec le même type d'algorithmes.
Bref : Computer science, ruining everything since 1960 :)
C'est une (petite) victoire pour moi, car j'avais anticipé cette possibilité dès que je m'étais intéressé aux techniques utilisées pour les jeux d'échecs. Concrètement, le Go n'est pas différent des échecs : il se résout par une exploration systématique. Bien entendu, le nombre de possibilité est très grand, mais il aura suffit de limiter l'exploration systématique aux solutions les plus prometteuses, grâce à des techniques d'apprentissage artificiel.
Les algorithmes mis en œuvre dans AlphaGo sont très anciens (plus de 20 ans) et il apparaît que le seul élément qui manquait jusqu'à lors était un investissement massif de temps et d'argent (ici Google) pour entraîner ces algorithmes avec des dizaines de milliers de parties. Ce n'est donc qu'un hasard du calendrier si c'est aujourd'hui qu'une IA remporte une victoire (écrasante il faut bien le dire) au jeu de Go.
De la même façon, il est possible d'affirmer, sans trop de risques, que TOUS les jeux à exploration systématique peuvent être attaqués avec le même type d'algorithmes.
Bref : Computer science, ruining everything since 1960 :)
Brixo - Building Blocks Meet Electricity and IoT
Encore un kickstarter intéressant dans le contexte de l'Internet des Objets : des sortes de légos connectés, embarquant des capteurs, des interfaces de communication ou simplement des connecteurs.
Voici le résultat d'une image sauvegardée 500 fois
Intéressante expérience où une image est sauvegardée de multiple fois en utilisant un format d'image destructif. Je suis assez surpris de voir le WEBP à ce point dégrader l'image.
Identifying Image Format from the First Few Bytes
Une heuristique simple pour identifier un type d'image à partir des premiers octets. L'algorithme donné est écrit en C++ mais peut s'adapter facilement à d'autres langages.
.jpg: FF D8 FF
.png: 89 50 4E 47 0D 0A 1A 0A
.gif: GIF87a ou GIF89a
.tiff: 49 49 2A 00 ou 4D 4D 00 2A
.bmp: BM
.webp: RIFF ???? WEBP
.ico: 00 00 01 00 ou 00 00 02 00 (cursor files)
.jpg: FF D8 FF
.png: 89 50 4E 47 0D 0A 1A 0A
.gif: GIF87a ou GIF89a
.tiff: 49 49 2A 00 ou 4D 4D 00 2A
.bmp: BM
.webp: RIFF ???? WEBP
.ico: 00 00 01 00 ou 00 00 02 00 (cursor files)
Why I don’t use CSS preprocessors | 456 Berea Street
C'est exactement mon ressenti vis à vis de ces outils, HTML et CSS sont déjà des langages de haut niveau, l'un pour décrire du contenu structuré l'autre pour décrire de la mise en forme. Il n'y a aucun intérêt à remplacer des langages uniques et standardisés par une multitude de DSL qui n'apportent, au final, pas grand chose si ce n'est une fragmentation indésirable en pratique.
Je copie l'article ici, pour mémoire :
Whenever I mention that I don’t use CSS preprocessors I tend to get strange looks from people who cannot imagine writing CSS without Sass. And so I have to defend my choice and explain why, over and over. Some people will understand, most won’t. Or they don’t want to. But here’s an attempt to explain my reasoning.
Back when CSS preprocessors first came into fashion I did try using them. And then every couple of years, due to external pressure and nagging, I have taken new looks and given them new chances. But to me they’ve always felt like solutions in need of a problem to solve. That is, I don’t really find the “problems” with CSS that preprocessors are intended to solve, problems. The scale of the site I’m building does not matter, be it a tiny site with just a few static pages or a humongous corporate intranet. I simply have never felt the need for mixins, nesting or extends.
A list of reasons then:
- I don’t feel the “problems” CSS preprocessors intend to solve are serious enough to warrant the cost, i.e. to me the solution is worse than the problem.
- I want absolute control of my CSS, which means I want to work hands on with it, and see exactly what will be sent to the browser (well, before it’s minified and gzipped, of course). If that means seeing the same declarations repeated in several rules, or having to see what vendor prefixes look like, so be it. To me, WET CSS is much more understandable and maintainable than DRY black box pseudo-CSS.
- I don’t want to learn and depend on a non-standard syntax to wrap my CSS in, making it require compilation before browsers can understand it. Neither do I want my colleagues to have to.
- I want my source CSS to be deployable at all times, albeit in un-minified, un-concatenated form. If my build process fails, for whatever reason (like an unpublished npm module), I can deploy the source CSS as an emergency solution. Performance may perhaps take a hit, but a slightly slower site is likely better than a site with broken or no CSS until the build process can be fixed.
- I don’t want to have to wait for compilation before seeing the results of my CSS changes. Processing time may be anything from negligible to frustrating, obviously, but if it takes longer than the time it takes for me to switch from my code editor to my browser and reload the page (≈1s) it’s too slow.
I’m fully aware that many people who use CSS preprocessors will disagree with most or all of the above. I already know that so no need to tell me :-).
However, me not using Sass or other CSS preprocessors like cssnext does not mean I don’t use CSS processors. The difference, as I see it, is whether or not your CSS requires compilation before browsers can understand it, which I really want to avoid.
I use PostCSS (with third party plugins and ones I’ve written myself) and CSScomb as helpers for things like:
- sorting declarations and fixing coding style issues with CSScomb
- automatically inserting vendor prefixes wherever they are necessary (or removing them wherever they’re not)
- inserting fallbacks for custom properties
- linting CSS
I set up both CSScomb and PostCSS to work on my source CSS, which means I always see the results. No black boxes. I can save my file and reload instantly without having to wait for compilation (since the changes are mostly cosmetic and vendor prefixes/fallbacks only need to be inserted once). But the tools save me some typing and fix most coding style inconsistencies for me. That’s my kind of CSS processing.
Je copie l'article ici, pour mémoire :
Whenever I mention that I don’t use CSS preprocessors I tend to get strange looks from people who cannot imagine writing CSS without Sass. And so I have to defend my choice and explain why, over and over. Some people will understand, most won’t. Or they don’t want to. But here’s an attempt to explain my reasoning.
Back when CSS preprocessors first came into fashion I did try using them. And then every couple of years, due to external pressure and nagging, I have taken new looks and given them new chances. But to me they’ve always felt like solutions in need of a problem to solve. That is, I don’t really find the “problems” with CSS that preprocessors are intended to solve, problems. The scale of the site I’m building does not matter, be it a tiny site with just a few static pages or a humongous corporate intranet. I simply have never felt the need for mixins, nesting or extends.
A list of reasons then:
- I don’t feel the “problems” CSS preprocessors intend to solve are serious enough to warrant the cost, i.e. to me the solution is worse than the problem.
- I want absolute control of my CSS, which means I want to work hands on with it, and see exactly what will be sent to the browser (well, before it’s minified and gzipped, of course). If that means seeing the same declarations repeated in several rules, or having to see what vendor prefixes look like, so be it. To me, WET CSS is much more understandable and maintainable than DRY black box pseudo-CSS.
- I don’t want to learn and depend on a non-standard syntax to wrap my CSS in, making it require compilation before browsers can understand it. Neither do I want my colleagues to have to.
- I want my source CSS to be deployable at all times, albeit in un-minified, un-concatenated form. If my build process fails, for whatever reason (like an unpublished npm module), I can deploy the source CSS as an emergency solution. Performance may perhaps take a hit, but a slightly slower site is likely better than a site with broken or no CSS until the build process can be fixed.
- I don’t want to have to wait for compilation before seeing the results of my CSS changes. Processing time may be anything from negligible to frustrating, obviously, but if it takes longer than the time it takes for me to switch from my code editor to my browser and reload the page (≈1s) it’s too slow.
I’m fully aware that many people who use CSS preprocessors will disagree with most or all of the above. I already know that so no need to tell me :-).
However, me not using Sass or other CSS preprocessors like cssnext does not mean I don’t use CSS processors. The difference, as I see it, is whether or not your CSS requires compilation before browsers can understand it, which I really want to avoid.
I use PostCSS (with third party plugins and ones I’ve written myself) and CSScomb as helpers for things like:
- sorting declarations and fixing coding style issues with CSScomb
- automatically inserting vendor prefixes wherever they are necessary (or removing them wherever they’re not)
- inserting fallbacks for custom properties
- linting CSS
I set up both CSScomb and PostCSS to work on my source CSS, which means I always see the results. No black boxes. I can save my file and reload instantly without having to wait for compilation (since the changes are mostly cosmetic and vendor prefixes/fallbacks only need to be inserted once). But the tools save me some typing and fix most coding style inconsistencies for me. That’s my kind of CSS processing.
Default passwords list - Select manufacturer
Les mots de passe par défaut pour divers équipements informatiques (par exemple, routeurs), pour différents constructeurs.
D'où l'intérêt de TOUJOURS changer les mots de passe par défaut, même pour des interfaces web accédées uniquement localement : certains scripts JS malicieux essayent d'accéder aux interfaces web des routeurs sur le réseau local et essayent les mots de passe par défaut.
D'où l'intérêt de TOUJOURS changer les mots de passe par défaut, même pour des interfaces web accédées uniquement localement : certains scripts JS malicieux essayent d'accéder aux interfaces web des routeurs sur le réseau local et essayent les mots de passe par défaut.
Responsive pixel art showcase
Un prototype de pixel-art responsive. C'est assez bluffant : ce n'est pas juste une image qui se redimensionne mais un ensemble de patterns qui peuvent se répéter (voire une image qui mute complètement en fonction de la taille et du ratio).
sorttable: Make all your tables sortable
sorttable, une petite librairie js pour ajouter des fonctions de tri à un tableau.
Le phonetic, un autre soundex francais (algorithme phonetique)
Un algorithme phonétique (famille d'algorithmes conçus pour indexer les mots selon leur prononciation) pour la langue française. Implémentation en PHP, C++ et Java.
What will happen if you...
Excellente présentation sur les subtilités du C.
C'est aussi un parfait exemple de pourquoi un standard devrait toujours chercher à minimiser les ambiguïtés (comportement indéfinis ou non spécifiés), au lieu de laisser les implémentations se débrouiller. Ou, à tout le moins, proposer une implémentation de référence.
C'est aussi un parfait exemple de pourquoi un standard devrait toujours chercher à minimiser les ambiguïtés (comportement indéfinis ou non spécifiés), au lieu de laisser les implémentations se débrouiller. Ou, à tout le moins, proposer une implémentation de référence.
Java 8 Stream Tutorial - Benjamin Winterberg
Un gros tutoriel par l'exemple pour l'API Stream de Java 8. Dans cette API, un stream (flux) est une suite d'éléments sur laquelle des opérations successives vont être appliquées (map, reduce, filtre, tri, agrégation, etc.). À noter que les traitements sur le flux peuvent être parallélisées très facilement.
Le code est particulièrement élégant, du fait de l'approche fonctionnelle de l'API (https://fr.wikipedia.org/wiki/Programmation_fonctionnelle). Cela rappelle, par certains côtés, l'API LINQ de C#.
J'apprécie beaucoup que Java se dote de plus en plus de sucre syntaxique : les lambdas à la place des classes anonymes, les try with resources à la place des try/finally, les foreach à la place des itérateurs, les imports statiques, etc.
Au fil des évolutions, la critique comme quoi Java serait "trop objet", déjà plutôt idiote à l'origine*, devient parfaitement caduque. En effet Java peut être vu comme un langage multiparadigme :
- impératif, si l'on utilise des méthodes et des imports statiques
- objet, évidemment
- fonctionnel (à l'origine avec les classes anonymes et du bidouillage), grâce aux lambdas
Bien sûr, avec les librairies appropriées, d'autres approches sont possibles : programmation orientée aspects, programmation réactive, etc.
* Plutôt idiote car, indépendamment de tout langage, un paradigme de programmation est une manière d'écrire et de structurer des programmes. Un langage exploite les philosophies d'un ou de plusieurs paradigmes pour fournir des constructions syntaxiques qui simplifient l'écriture et la lecture du code pour un programmeur ayant décidé de penser conformément à ces philosophies. Rien n'empêche d'exploiter un langage et d'y écrire des programmes en se conformant à une philosophie différente. Le C est un exemple flagrant : impératif par nature, il est tellement permissif, que l'on peut y penser en objet, en fonctionnel, en réactif, etc.
Le code est particulièrement élégant, du fait de l'approche fonctionnelle de l'API (https://fr.wikipedia.org/wiki/Programmation_fonctionnelle). Cela rappelle, par certains côtés, l'API LINQ de C#.
J'apprécie beaucoup que Java se dote de plus en plus de sucre syntaxique : les lambdas à la place des classes anonymes, les try with resources à la place des try/finally, les foreach à la place des itérateurs, les imports statiques, etc.
Au fil des évolutions, la critique comme quoi Java serait "trop objet", déjà plutôt idiote à l'origine*, devient parfaitement caduque. En effet Java peut être vu comme un langage multiparadigme :
- impératif, si l'on utilise des méthodes et des imports statiques
- objet, évidemment
- fonctionnel (à l'origine avec les classes anonymes et du bidouillage), grâce aux lambdas
Bien sûr, avec les librairies appropriées, d'autres approches sont possibles : programmation orientée aspects, programmation réactive, etc.
* Plutôt idiote car, indépendamment de tout langage, un paradigme de programmation est une manière d'écrire et de structurer des programmes. Un langage exploite les philosophies d'un ou de plusieurs paradigmes pour fournir des constructions syntaxiques qui simplifient l'écriture et la lecture du code pour un programmeur ayant décidé de penser conformément à ces philosophies. Rien n'empêche d'exploiter un langage et d'y écrire des programmes en se conformant à une philosophie différente. Le C est un exemple flagrant : impératif par nature, il est tellement permissif, que l'on peut y penser en objet, en fonctionnel, en réactif, etc.
Why you shouldn't trust successful people's advice
En résumé : soyez très critique vis-à-vis des avis de ceux qui réussissent. De par le biais du survivant (considérer uniquement le cas des survivants au détriment des non-survivants), nous avons tendance à surestimer l'expérience de ceux qui réussissent par rapport à l'expérience des personnes qui n'ont pas réussi.
Concrètement, personne ne sait réellement quel est la méthode pour réussir, tout simplement parce que le facteur chance est énorme (avantages de départ, opportunités, bon endroit/bon moment, etc.). C'est d'ailleurs pour cela que la réussite à tendance à augmenter avec le nombre d'essais.
Concrètement, personne ne sait réellement quel est la méthode pour réussir, tout simplement parce que le facteur chance est énorme (avantages de départ, opportunités, bon endroit/bon moment, etc.). C'est d'ailleurs pour cela que la réussite à tendance à augmenter avec le nombre d'essais.
Réinitialiser les vbox guest additions sous linux mint
De nombreuses distributions linux embarquent désormais les vbox guest additions directement dans leurs dépôts de paquets. Dans ce cas, il est déconseillé d'installer soi-même les vbox guest additions (de l'aveu même du script d'installation).
Cependant, comme je suis curieux, j'ai tenté l'installation quand même et planté complètement mon système (Linux Mint) : copier-coller hôte-invité impossible, résolution figée, accélération 3D désactivée, etc.
Voilà la méthode que j'ai utilisé pour réparer tout ça (privilèges root requis).
1. On nettoie et on réinstalle
> apt-get autoremove --purge virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
> apt-get install virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
2. On force la reconfiguration
> dpkg-reconfigure virtualbox-guest-dkms
3. On redémarre ou on recharge simplement les modules concernés
> modprobe -a vboxguest vboxsf vboxvideo
Cependant, comme je suis curieux, j'ai tenté l'installation quand même et planté complètement mon système (Linux Mint) : copier-coller hôte-invité impossible, résolution figée, accélération 3D désactivée, etc.
Voilà la méthode que j'ai utilisé pour réparer tout ça (privilèges root requis).
1. On nettoie et on réinstalle
> apt-get autoremove --purge virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
> apt-get install virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
2. On force la reconfiguration
> dpkg-reconfigure virtualbox-guest-dkms
3. On redémarre ou on recharge simplement les modules concernés
> modprobe -a vboxguest vboxsf vboxvideo
Melody's Guide to Programming Language
Avec l'âge et l'expérience, je ne supporte vraiment plus les "frameworks" Java. Récemment j'ai du refaire du Spring et... franchement.
Réseau interne sous VirtualBox
VirtualBox permet de créer différent types de réseaux pour vos VM :
- NAT : la VM communique avec l'extérieur grâce à un mécanisme de NAT (network address translation). Depuis l'extérieur, les requêtes de la VM ont l'air d'être envoyées par la machine hôte.
- Bridged : la VM est considérée comme une machine à part entière sur le LAN, elle pourra obtenir son IP directement à partir d'un serveur DHCP accessible depuis le LAN.
- Internal Network : la VM est isolée (ne peut pas communiquer avec l'hôte), mais peut communiquer avec les autres VM de l'hôte.
Le mode Internal Network est celui qui m'intèresse ici. Pour le mettre en place (VirtualBox 5.0.10), il faut :
0. Arrêter vos VMs ;)
1. Pour chaque VM, passer l'interface réseau virtuelle en mode Internal Network et, éventuellement, donner un nom de réseau (par défaut: intnet).
2. Soit configurer les VM avec une IP statique (dépend de l'OS virtuel, bien sur), soit demander à VirtualBox de mettre en place un DHCP pour le réseau interne. La mise en place d'un DHCP ne peut se faire qu'avec une commande :
> VBoxManage dhcpserver add --netname <nom du réseau> --ip <ip du DHCP> --netmask <masque> --lowerip <borne inférieure de la plage d'IP> --upperip <borne supérieure de la plage d'IP> --enable
Par exemple :
> VBoxManage dhcpserver add --netname intnet --ip 10.10.10.254 --netmask 255.255.255.0 --lowerip 10.10.10.1 --upperip 10.10.10.100 --enable
Note : il se peut que la VM n'arrive pas à récupérer une IP depuis le DHCP de VirtualBox. Ce problème se résoud en changeant l'adresse MAC de l'interface réseau virtuelle, forçant l'OS virtuel à râfraichir ses configurations réseaux.
- NAT : la VM communique avec l'extérieur grâce à un mécanisme de NAT (network address translation). Depuis l'extérieur, les requêtes de la VM ont l'air d'être envoyées par la machine hôte.
- Bridged : la VM est considérée comme une machine à part entière sur le LAN, elle pourra obtenir son IP directement à partir d'un serveur DHCP accessible depuis le LAN.
- Internal Network : la VM est isolée (ne peut pas communiquer avec l'hôte), mais peut communiquer avec les autres VM de l'hôte.
Le mode Internal Network est celui qui m'intèresse ici. Pour le mettre en place (VirtualBox 5.0.10), il faut :
0. Arrêter vos VMs ;)
1. Pour chaque VM, passer l'interface réseau virtuelle en mode Internal Network et, éventuellement, donner un nom de réseau (par défaut: intnet).
2. Soit configurer les VM avec une IP statique (dépend de l'OS virtuel, bien sur), soit demander à VirtualBox de mettre en place un DHCP pour le réseau interne. La mise en place d'un DHCP ne peut se faire qu'avec une commande :
> VBoxManage dhcpserver add --netname <nom du réseau> --ip <ip du DHCP> --netmask <masque> --lowerip <borne inférieure de la plage d'IP> --upperip <borne supérieure de la plage d'IP> --enable
Par exemple :
> VBoxManage dhcpserver add --netname intnet --ip 10.10.10.254 --netmask 255.255.255.0 --lowerip 10.10.10.1 --upperip 10.10.10.100 --enable
Note : il se peut que la VM n'arrive pas à récupérer une IP depuis le DHCP de VirtualBox. Ce problème se résoud en changeant l'adresse MAC de l'interface réseau virtuelle, forçant l'OS virtuel à râfraichir ses configurations réseaux.
How "Exit Traps" Can Make Your Bash Scripts Way More Robust And Reliable
Une petite technique pour améliorer la robustesse de vos scripts. "trap" permet de déclencher l'exécution d'une procédure lorsque le script quitte. Cela permet d'assurer que, même en cas d'erreur, le script termine dans un état prédictible (ressources désallouées, services relancés, etc.).
#!/bin/bash
function finish {
# Your cleanup code here
}
trap finish EXIT
A noter que "trap" peut capturer d'autres signaux :
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html
#!/bin/bash
function finish {
# Your cleanup code here
}
trap finish EXIT
A noter que "trap" peut capturer d'autres signaux :
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html
Authentication Concept Map
Une petite carte des concepts et du vocabulaire relatifs à l'authentification. Je me demandais justement d'où java.security sortait ces termes Subject, Principal, etc.
Source de l'image : http://telicthoughts.blogspot.fr/2011/02/authentication-concept-map.html
Voir aussi http://stackoverflow.com/a/5025140, qui explique que tout n'est malheureusement pas aussi bien défini :
"As noted in the comments, even the authoritative sources do not agree on these terms. I searched NIST, SANS, IEEE, MITRE and several "quasi-authoritative" sources such as security exam guides while preparing this response. No single source that I found which was at least quasi-authoritative covered all three terms and all differed significantly in their usage."
Source de l'image : http://telicthoughts.blogspot.fr/2011/02/authentication-concept-map.html
Voir aussi http://stackoverflow.com/a/5025140, qui explique que tout n'est malheureusement pas aussi bien défini :
"As noted in the comments, even the authoritative sources do not agree on these terms. I searched NIST, SANS, IEEE, MITRE and several "quasi-authoritative" sources such as security exam guides while preparing this response. No single source that I found which was at least quasi-authoritative covered all three terms and all differed significantly in their usage."
Comparing floating point numbers
Un problème très classique, mais toujours intéressant. Si vous faîtes du calcul scientifique, de manière générale, n'utilisez pas les flottants IEEE 754 ; préférez-y des librairies de calcul arithmétique à précision arbitraire.
En Java, vous pouvez utiliser la classe BigDecimal.
En C/C++, il y a GMP : https://gmplib.org
Pour les autres langages, voir https://en.wikipedia.org/wiki/List_of_arbitrary-precision_arithmetic_software
En Java, vous pouvez utiliser la classe BigDecimal.
En C/C++, il y a GMP : https://gmplib.org
Pour les autres langages, voir https://en.wikipedia.org/wiki/List_of_arbitrary-precision_arithmetic_software
L'opérateur conditionnel ternaire
Je n'aime pas beaucoup l'opérateur conditionnel ternaire (a ? b : c). Je déconseille toujours à mes étudiants de l'utiliser, car j'estime qu'il nuit à la lisibilité du code.
Eh bien, je vais pouvoir désormais illustrer mon conseil avec un exemple réel, qui vient du code de Jetty 9 :
super(new URL[]{},parent!=null?parent
:(Thread.currentThread().getContextClassLoader()!=null?Thread.currentThread().getContextClassLoader()
:(WebAppClassLoader.class.getClassLoader()!=null?WebAppClassLoader.class.getClassLoader()
:ClassLoader.getSystemClassLoader())));
Eh bien, je vais pouvoir désormais illustrer mon conseil avec un exemple réel, qui vient du code de Jetty 9 :
super(new URL[]{},parent!=null?parent
:(Thread.currentThread().getContextClassLoader()!=null?Thread.currentThread().getContextClassLoader()
:(WebAppClassLoader.class.getClassLoader()!=null?WebAppClassLoader.class.getClassLoader()
:ClassLoader.getSystemClassLoader())));
Comment déterminer à quelle heure a été prise une photo ?
Une méthode pour déterminer approximativement à quelle heure a été prise une photo, en se basant sur les ombres portées.
Récompenser pour motiver. Une bonne idée ?
Pourquoi le management par la récompense n'est pas forcément une bonne idée.
"Récompenser un enfant parce qu’il s’est “bien” comporté ne lui fait pas comprendre pourquoi il est important d’agir de la sorte. Non. Cela lui fait comprendre qu’en agissant ainsi, il est sûr de recevoir une récompense."
"Peut-on mêler une récompense extérieure au plaisir qu’il y a à effectuer une action pour elle-même ? Non. Dès le moment où il y a une récompense, nous serons avant tout motivés par la récompense."
"Récompenser un enfant parce qu’il s’est “bien” comporté ne lui fait pas comprendre pourquoi il est important d’agir de la sorte. Non. Cela lui fait comprendre qu’en agissant ainsi, il est sûr de recevoir une récompense."
"Peut-on mêler une récompense extérieure au plaisir qu’il y a à effectuer une action pour elle-même ? Non. Dès le moment où il y a une récompense, nous serons avant tout motivés par la récompense."
TCP TIME-WAIT & les serveurs Linux à fort trafic | Vincent Bernat
Intéressant article sur les options 'net.ipv4.tcp_tw_recycle' et 'net.ipv4.tcp_tw_reuse' qui spécifient ce que la pile TCP/IP de Linux est autorisée à faire avec les connexions dans l'état TIME-WAIT ; un état d'attente destiné (i) à empêcher qu'une nouvelle connexion n'accepte de données qui arriveraient en retard et (ii) à assurer que l'hôte distant a fermé la connexion.
Les explications sont très claires, par exemple le diagramme d'état de TCP : http://d1g3mdmxf8zbo9.cloudfront.net/images/tcp/tcp-state-diagram.png
En résumé, je recopie la conclusion de l'article :
Côté serveur, ne pas activer net.ipv4.tcp_tw_recycle à moins d’être sûr de ne jamais avoir à interagir avec des machines se partageant la même IP. Activer net.ipv4.tcp_tw_reuse est sans effet sur les connexions entrantes.
Côté client, activer net.ipv4.tcp_tw_reuse est une solution quasiment fiable. Activer en plus net.ipv4.tcp_tw_recycle est alors quasi-inutile.
Les explications sont très claires, par exemple le diagramme d'état de TCP : http://d1g3mdmxf8zbo9.cloudfront.net/images/tcp/tcp-state-diagram.png
En résumé, je recopie la conclusion de l'article :
Côté serveur, ne pas activer net.ipv4.tcp_tw_recycle à moins d’être sûr de ne jamais avoir à interagir avec des machines se partageant la même IP. Activer net.ipv4.tcp_tw_reuse est sans effet sur les connexions entrantes.
Côté client, activer net.ipv4.tcp_tw_reuse est une solution quasiment fiable. Activer en plus net.ipv4.tcp_tw_recycle est alors quasi-inutile.
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.
Iterative Vs Incremental
"IterativeDevelopment means:
I write loads of stuff that's a complete mess
I go through it throwing out the irrelevant drivel, expanding on the important bits, and sorting out the structure
I go through it again now I can start to see the shape of it, sorting it some more
I go through it yet again, etc, until it's GoodEnough
IncrementalDevelopment means:
I write part one
I write part two
I write part three, etc, until the book is finished
[...]
So in practice, at least in XP practice, your development is both incremental and iterative.
-- StephenHutchinson
The danger is when people confuse the two. I saw a 200 person project iterating on their requirements (allowing arbitrary amount of change) when they should have been incrementing through their requirements, and incrementing & iterating (as you describe) through their design. They were, of course, not making any progress. Also saw a 100 person project claiming they were iterating through their entire novel, when in fact they were doing neither - they were stuck in the mud. They needed to get at least some part working first so they could tell they were moving - once again, needed incrementing as a base.
-- AlistairCockburn"
Image de la miniature : http://www.applitude.se/images/inc_vs_ite.png
I write loads of stuff that's a complete mess
I go through it throwing out the irrelevant drivel, expanding on the important bits, and sorting out the structure
I go through it again now I can start to see the shape of it, sorting it some more
I go through it yet again, etc, until it's GoodEnough
IncrementalDevelopment means:
I write part one
I write part two
I write part three, etc, until the book is finished
[...]
So in practice, at least in XP practice, your development is both incremental and iterative.
-- StephenHutchinson
The danger is when people confuse the two. I saw a 200 person project iterating on their requirements (allowing arbitrary amount of change) when they should have been incrementing through their requirements, and incrementing & iterating (as you describe) through their design. They were, of course, not making any progress. Also saw a 100 person project claiming they were iterating through their entire novel, when in fact they were doing neither - they were stuck in the mud. They needed to get at least some part working first so they could tell they were moving - once again, needed incrementing as a base.
-- AlistairCockburn"
Image de la miniature : http://www.applitude.se/images/inc_vs_ite.png
HTML5 flowchart
Choisir rapidement quelle balise utiliser parmi nav, article, figure, aside, section et, en dernier recours, div.
Science article : a guide
SMBC n'est pas toujours sérieux, mais c'est une méthode plutôt efficace pour classer rapidement les articles scientifiques : http://www.smbc-comics.com/index.php?id=3880
Tous les chercheurs skient sur les pistes de tennis | binaire
"Rendre la parole scientifique aux chercheurs.
Ils sont un peu moins médiatiques à écouter, mais ils partagent des grains de science qui augmentera le niveau de culture scientifique de toutes et tous dans notre société."
Voilà qui n'est que trop vrai.
Ils sont un peu moins médiatiques à écouter, mais ils partagent des grains de science qui augmentera le niveau de culture scientifique de toutes et tous dans notre société."
Voilà qui n'est que trop vrai.
The website is unknown - How DNS works
Le fonctionnement du DNS illustré. Tout en vectoriel, c'est très propre.
Ephemeral Hosting
C'est intéressant, cette page n'existe que si des personnes la visualisent. Il s'agit en fait d'un annuaire centralisé qui associe des hash à des connexions websocket ouvertes depuis des navigateurs.
Lorsque vous visualisez cette page, le hash "2bbbf21959178ef2f935e90fc60e5b6e368d27514fe305ca7dcecc32c0134838" est recherché dans l'annuaire et le contenu correspondant est téléchargé depuis l'un des navigateurs connecté au serveur (c'est-à-dire depuis l'un des navigateurs qui affiche la page à cet instant).
Une fois le contenu chargé, une connexion websocket depuis votre navigateur est ajoutée à l'annuaire et vous faîtes à votre tour partie du réseau.
Lorsque plus personne ne visualise cette page, elle disparaît purement et simplement. Bon, celle là étant la page principale, j'imagine que son auteur doit y rester connecté en permanence pour qu'elle ne disparaisse pas.
Mais attention, ce n'est pas réellement du pair à pair, d'une part parce que l'annuaire est centralisé mais aussi parce que l'annuaire est un proxy qui maintient des connexions vers tous ceux qui visualisent la page : il n'y a pas d'échange direct entre les navigateurs. Mais cela reste intéressant quand même.
Code source ici : https://github.com/losvedir/ephemeral2
Lorsque vous visualisez cette page, le hash "2bbbf21959178ef2f935e90fc60e5b6e368d27514fe305ca7dcecc32c0134838" est recherché dans l'annuaire et le contenu correspondant est téléchargé depuis l'un des navigateurs connecté au serveur (c'est-à-dire depuis l'un des navigateurs qui affiche la page à cet instant).
Une fois le contenu chargé, une connexion websocket depuis votre navigateur est ajoutée à l'annuaire et vous faîtes à votre tour partie du réseau.
Lorsque plus personne ne visualise cette page, elle disparaît purement et simplement. Bon, celle là étant la page principale, j'imagine que son auteur doit y rester connecté en permanence pour qu'elle ne disparaisse pas.
Mais attention, ce n'est pas réellement du pair à pair, d'une part parce que l'annuaire est centralisé mais aussi parce que l'annuaire est un proxy qui maintient des connexions vers tous ceux qui visualisent la page : il n'y a pas d'échange direct entre les navigateurs. Mais cela reste intéressant quand même.
Code source ici : https://github.com/losvedir/ephemeral2
http://www.alanzucconi.com/2015/09/30/colour-sorting/
Le problème de tri des couleurs est directement défini par la difficulté de trouver une relation d'ordre qui soit visuellement satisfaisante pour un espace colorimétrique.
Si l'on prend les nuanciers types arc en ciel, ceux ci sont produits dans un espace HSL en faisant varier la teinte (hue) et en conservant la saturation et la luminance à une valeur fixe (typiquement 1). Essayez sur directement sur http://google.github.io/palette.js
Ici, la relation d'ordre est spécifiée par la valeur de teinte (unidimensionnelle) d'où un bel arc en ciel visuellement uniforme, comme ici : http://www.play-crafts.com/blog/wp-content/uploads/2013/12/hue.jpg
Cependant, si l'on fait varier aléatoirement la teinte, la saturation et la luminance, le bel arc en ciel n'est plus possible car un même vert peut exister en plusieurs niveaux de saturation/luminosité. Avec une simple relation d'ordre lexicographique sur les valeurs de teinte, saturation et luminance, le tri produit ceci http://www.alanzucconi.com/wp-content/uploads/2015/09/sort_hls.png
On observe que l'arc en ciel est là, mais avec des rais de différentes saturation/luminosité qui produisent du bruit dans le résultat.
Si l'on cherche à regrouper les couleurs entre elles, cela peut se faire en divisant l'espace en classes, soit uniformément (découpage en blocs uniformes), soit au moyen d'un algorithme de clustering.
Cela donne un résultat où les couleurs sont effectivement regroupées mais sans arc en ciel global : http://www.alanzucconi.com/wp-content/uploads/2015/09/sort_hsv-lum.png
Il est possible aussi de minimiser la distance entre toutes les couleurs lors de la réduction en dimension 1, ce qui se formalise en problème de voyageur du commerce. Toutefois, si le résultat obtenu est très lisse, il est aussi visuellement aléatoire : http://www.alanzucconi.com/wp-content/uploads/2015/09/sort_nn_hsv.png
Si l'on prend les nuanciers types arc en ciel, ceux ci sont produits dans un espace HSL en faisant varier la teinte (hue) et en conservant la saturation et la luminance à une valeur fixe (typiquement 1). Essayez sur directement sur http://google.github.io/palette.js
Ici, la relation d'ordre est spécifiée par la valeur de teinte (unidimensionnelle) d'où un bel arc en ciel visuellement uniforme, comme ici : http://www.play-crafts.com/blog/wp-content/uploads/2013/12/hue.jpg
Cependant, si l'on fait varier aléatoirement la teinte, la saturation et la luminance, le bel arc en ciel n'est plus possible car un même vert peut exister en plusieurs niveaux de saturation/luminosité. Avec une simple relation d'ordre lexicographique sur les valeurs de teinte, saturation et luminance, le tri produit ceci http://www.alanzucconi.com/wp-content/uploads/2015/09/sort_hls.png
On observe que l'arc en ciel est là, mais avec des rais de différentes saturation/luminosité qui produisent du bruit dans le résultat.
Si l'on cherche à regrouper les couleurs entre elles, cela peut se faire en divisant l'espace en classes, soit uniformément (découpage en blocs uniformes), soit au moyen d'un algorithme de clustering.
Cela donne un résultat où les couleurs sont effectivement regroupées mais sans arc en ciel global : http://www.alanzucconi.com/wp-content/uploads/2015/09/sort_hsv-lum.png
Il est possible aussi de minimiser la distance entre toutes les couleurs lors de la réduction en dimension 1, ce qui se formalise en problème de voyageur du commerce. Toutefois, si le résultat obtenu est très lisse, il est aussi visuellement aléatoire : http://www.alanzucconi.com/wp-content/uploads/2015/09/sort_nn_hsv.png
Gen I Capture Mechanics | The Cave of Dragonflies
Description très complète et très détaillées des algorithmes de capture dans le jeu Pokémon (génération 1). Bah quoi, c'est intéressant aussi :)
The C++14 Standard: What You Need to Know
Avancée dans C++14.
Voir aussi les évolutions depuis C++11 :
http://www.codeproject.com/Articles/570638/Ten-Cplusplus-Features-Every-Cplusplus-Developer
http://blog.smartbear.com/c-plus-plus/the-biggest-changes-in-c11-and-why-you-should-care/
Voir aussi les évolutions depuis C++11 :
http://www.codeproject.com/Articles/570638/Ten-Cplusplus-Features-Every-Cplusplus-Developer
http://blog.smartbear.com/c-plus-plus/the-biggest-changes-in-c11-and-why-you-should-care/
Reverse Engineering for Beginners
Un livre gratuit sur le reverse engineering, assez intéressant.
Les sources Latex sont accessibles ici : https://github.com/dennis714/RE-for-beginners
Les sources Latex sont accessibles ici : https://github.com/dennis714/RE-for-beginners
The Song of the Introvert
Étant moi-même un peu introverti, je traduis ici un article très intéressant sur la façon dont nous ressentons les interactions avec les autres :
"Vous êtes une menace.
C'est un mot fort. Je ne veux pas dire que vous êtes synonyme de douleur, de blessure ou de dégât. Mais je suis un introverti et vous, en tant qu'inconnu, vous êtes une menace à mes yeux. Je ne sais pas ce quelles sont vos intentions, mais je suis certain que vous en avez. Aussi, tant que je ne sais quelles sont vos intentions exactes, vous êtes une menace. Car vous voyez...
J'ai des problèmes de contrôle.
Je ne suis serein que lorsque je suis seul dans mon Antre. Mes affaires y sont à leurs places, le mobilier est à mon goût et les murs sont rouges - ils m'entourent complètement. Il y a rarement des surprises dans mon Antre, et c'est comme ça que je l'aime, merci. Mon Antre est le lieu où je peux réduire le chaos et...
Vous êtes une forme de chaos.
Vous êtes une forme de désordre et de confusion. Je n'ai pas encore déterminé comment interagir visuellement avec vous, je ne sais pas non plus quelles sont vos intentions et je ne comprends donc pas qu'est-ce qui vous motive : vous êtes imprévisible. Vous êtes inconnu, ce qui signifie que vous êtes porteur d'inattendu, et l'inattendu n'est pas le sel de la vie, ce sont des données nouvelles qui ne cadrent pas encore avec mon système et...
Je suis obsédé par les systèmes.
Mon amour de la prévision a un coût. Je rédige absolument tout dans un petit carnet noir - sans lignes. Il y a des cases à côté de ce qui doit être suivi, il y a des étoiles pour ce que je ne dois pas oublier. Un surligneur jaune et un stylo bille .5mm m'accompagnent partout car ce carnet fait partie du système bien défini qui me permet de ne rien manquer. Vous voyez, paradoxalement, alors que je préférerais me cacher dans Antre, j'aime aussi beaucoup les signaux et...
Vous êtes plein de signaux.
Je suis fasciné par la façon dont vous ponctuez vos phrases avec vos mains. Vous faîtes des pauses aussi longtemps que nécessaire pour être sûr de dire quelque chose d'utile. Parfois ces pauses sont exaspéremment longues. Vous êtes profondément optimiste et affirmez bizarrement des choses impossibles. Vous n'avez pas peur de donner du feedback aux inconnus. Vous êtes capable de donner le même feedback avec un simple coup d'œil. C'est fascinant de voir comment chacun de vous construit ses propres systèmes pour vivre au quotidien. Je suis fasciné car...
Je suis insatiablement (et silencieusement) curieux.
Ma curiosité est un mécanisme de défense. J'essaye désespérément de retourner dans mon Antre, où la surprise est parfaitement planifiée. J'ai appris le plus de choses, le plus vite possible, à propos de vous : au plus vite je pourrais déterminer vos intentions, au plus vite je saurais ce qui vous motive. Et lorsque je saurais ce qui vous motive, je pourrais mieux comprendre comment communiquer avec vous. Je n'essaye pas de vous manipuler, je n'essaye pas de vous flatter, j'essaye simplement de vous comprendre car...
Je suis un introverti."
Bon, ce texte est un peu difficile à traduire, je trouve : il y a des phrases que j'ai interprété très librement. N'hésitez pas à me suggérer des améliorations par email : contact@benjaminbillet.fr
"Vous êtes une menace.
C'est un mot fort. Je ne veux pas dire que vous êtes synonyme de douleur, de blessure ou de dégât. Mais je suis un introverti et vous, en tant qu'inconnu, vous êtes une menace à mes yeux. Je ne sais pas ce quelles sont vos intentions, mais je suis certain que vous en avez. Aussi, tant que je ne sais quelles sont vos intentions exactes, vous êtes une menace. Car vous voyez...
J'ai des problèmes de contrôle.
Je ne suis serein que lorsque je suis seul dans mon Antre. Mes affaires y sont à leurs places, le mobilier est à mon goût et les murs sont rouges - ils m'entourent complètement. Il y a rarement des surprises dans mon Antre, et c'est comme ça que je l'aime, merci. Mon Antre est le lieu où je peux réduire le chaos et...
Vous êtes une forme de chaos.
Vous êtes une forme de désordre et de confusion. Je n'ai pas encore déterminé comment interagir visuellement avec vous, je ne sais pas non plus quelles sont vos intentions et je ne comprends donc pas qu'est-ce qui vous motive : vous êtes imprévisible. Vous êtes inconnu, ce qui signifie que vous êtes porteur d'inattendu, et l'inattendu n'est pas le sel de la vie, ce sont des données nouvelles qui ne cadrent pas encore avec mon système et...
Je suis obsédé par les systèmes.
Mon amour de la prévision a un coût. Je rédige absolument tout dans un petit carnet noir - sans lignes. Il y a des cases à côté de ce qui doit être suivi, il y a des étoiles pour ce que je ne dois pas oublier. Un surligneur jaune et un stylo bille .5mm m'accompagnent partout car ce carnet fait partie du système bien défini qui me permet de ne rien manquer. Vous voyez, paradoxalement, alors que je préférerais me cacher dans Antre, j'aime aussi beaucoup les signaux et...
Vous êtes plein de signaux.
Je suis fasciné par la façon dont vous ponctuez vos phrases avec vos mains. Vous faîtes des pauses aussi longtemps que nécessaire pour être sûr de dire quelque chose d'utile. Parfois ces pauses sont exaspéremment longues. Vous êtes profondément optimiste et affirmez bizarrement des choses impossibles. Vous n'avez pas peur de donner du feedback aux inconnus. Vous êtes capable de donner le même feedback avec un simple coup d'œil. C'est fascinant de voir comment chacun de vous construit ses propres systèmes pour vivre au quotidien. Je suis fasciné car...
Je suis insatiablement (et silencieusement) curieux.
Ma curiosité est un mécanisme de défense. J'essaye désespérément de retourner dans mon Antre, où la surprise est parfaitement planifiée. J'ai appris le plus de choses, le plus vite possible, à propos de vous : au plus vite je pourrais déterminer vos intentions, au plus vite je saurais ce qui vous motive. Et lorsque je saurais ce qui vous motive, je pourrais mieux comprendre comment communiquer avec vous. Je n'essaye pas de vous manipuler, je n'essaye pas de vous flatter, j'essaye simplement de vous comprendre car...
Je suis un introverti."
Bon, ce texte est un peu difficile à traduire, je trouve : il y a des phrases que j'ai interprété très librement. N'hésitez pas à me suggérer des améliorations par email : contact@benjaminbillet.fr
3 years of work
C'est quoi une thèse ? 3 ans de travail et 180 tableaux blancs résumés en 11 secondes :')
http://benjaminbillet.fr/media/3yearsofwork.mp4
http://benjaminbillet.fr/media/3yearsofwork.mp4
Le prochain processeur mobile de Qualcomm va lutter contre les malwares | {niKo[piK]}
Pour le grand public, la mise en oeuvre de la sécurité au niveau matériel n'est pas une bonne idée. La sécurité est le domaine qui évolue le plus vite en informatique, du fait de la lutte permanente entre ceux qui attaquent et ceux qui protègent.
Amener cela au niveau matériel signifie qu'il ne sera plus possible de mettre à jour la sécurité sans mettre à jour, au mieux, un firmware, là où une mise à jour du système d'exploitation aurait suffit.
Amener cela au niveau matériel signifie qu'il ne sera plus possible de mettre à jour la sécurité sans mettre à jour, au mieux, un firmware, là où une mise à jour du système d'exploitation aurait suffit.
L’économie malade de ses modèles | CNRS Le journal
L'économie, telle qu'elle est pratiquée, étudiée, appliquée et encensée n'a aucune valeur scientifique. Il s'agit d'un empilement d'idées arbitraires, de postulats absurdes et de raisonnement mathématiques aberrants.
Deux extraits révélateurs :
"Adopter un point de vue dynamique est une évidence dans toutes les disciplines scientifiques, sauf pour les économistes néoclassiques, qui restent figés sur une méthodologie statique qui date des années 1870"
"Le pire étant que la validité mathématique de ces simplifications a été étudiée et réfutée (link is external) dans les années 1970 par l’économiste français Gérard Debreu. Malheureusement, comme à chaque fois que la communauté des économistes néoclassiques a été confrontée à un résultat qui la gênait, l’auteur a été célébré par un prix Nobel… et le résultat a été oublié."
Deux extraits révélateurs :
"Adopter un point de vue dynamique est une évidence dans toutes les disciplines scientifiques, sauf pour les économistes néoclassiques, qui restent figés sur une méthodologie statique qui date des années 1870"
"Le pire étant que la validité mathématique de ces simplifications a été étudiée et réfutée (link is external) dans les années 1970 par l’économiste français Gérard Debreu. Malheureusement, comme à chaque fois que la communauté des économistes néoclassiques a été confrontée à un résultat qui la gênait, l’auteur a été célébré par un prix Nobel… et le résultat a été oublié."
Page 2 / 8
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.
RSS Feed
Tag cloud
sam. 06 août 2016 14:30:11 CEST
sécurité http