Journal
Ce journal contient 354 entrées.
Teach Yourself Japanese
Teach Yourself Japanese
Getting started with the i3 tiling window manager
Démarrer avec i3
/proc
/proc in a nutshell :)
AcoustID
AcoustID is a project providing complete audio identification service, based entirely on open source software.
The Unreasonable Effectiveness of Recurrent Neural Networks
Expérimentations avec des réseaux de neurones récurrents.
Voir aussi (excellent blog): http://colah.github.io/posts/2015-08-Understanding-LSTMs
Voir aussi (excellent blog): http://colah.github.io/posts/2015-08-Understanding-LSTMs
OverTheWire: Wargames
"The wargames offered by the OverTheWire community can help you to learn and practice security concepts in the form of fun-filled games."
Pour les débutants, commencez par Bandit, pour intégrer les bases: http://overthewire.org/wargames/bandit
Pour les débutants, commencez par Bandit, pour intégrer les bases: http://overthewire.org/wargames/bandit
Seeing Theory
A visual introduction to probability and statistics.
Transcode
transcode est un programme de traitement vidéo permettant notamment de stabiliser des vidéos.
Computing linear regression in one pass
Dans le même ordre d'idée que le lien précédent, sauf qu'il s'agit cette fois d'effectuer une régression linéaire en continu. Comme beaucoup d'algorithmes continu, il présente l'avantage de travailler en mémoire constante.
Le thumbnail vient de XKCD : https://xkcd.com/1725
Le thumbnail vient de XKCD : https://xkcd.com/1725
Computing skewness and kurtosis in one pass
Comme vous l'avez peut être déjà remarqué, une bonne partie de mes travaux de thèse ont porté sur le traitement continu de flux de données : http://benjaminbillet.fr/media/benjaminbillet_memoire.pdf
De fait, je m'intéresse beaucoup aux techniques mathématiques permettant de réaliser des calculs en continu (c'est-à-dire sans mémoriser l'intégralité des résultats passés).
Cet article de blog décrit comment calculer en continu l'espérance, la variance, l'écart-type, le coefficient de dissymétrie et le coefficient d'aplatissement sur un flux d'échantillons. De manière plus générale il s'agit d'une méthode pour calculer les moments (https://fr.wikipedia.org/wiki/Moment_%28mathématiques%29). On pourrait imaginer donc l'utiliser pour calculer d'autres mesures statistiques d'ordre supérieur. J'essayerais d'ailleurs, si je parviens à bien tout comprendre, d'en faire une implémentation généralisée :)
Quelques références:
- B. P. Welford (1962)."Note on a method for calculating corrected sums of squares and products".
- Donald E. Knuth (1998). The Art of Computer Programming, volume 2: Seminumerical Algorithms, 3rd edn.
De fait, je m'intéresse beaucoup aux techniques mathématiques permettant de réaliser des calculs en continu (c'est-à-dire sans mémoriser l'intégralité des résultats passés).
Cet article de blog décrit comment calculer en continu l'espérance, la variance, l'écart-type, le coefficient de dissymétrie et le coefficient d'aplatissement sur un flux d'échantillons. De manière plus générale il s'agit d'une méthode pour calculer les moments (https://fr.wikipedia.org/wiki/Moment_%28mathématiques%29). On pourrait imaginer donc l'utiliser pour calculer d'autres mesures statistiques d'ordre supérieur. J'essayerais d'ailleurs, si je parviens à bien tout comprendre, d'en faire une implémentation généralisée :)
Quelques références:
- B. P. Welford (1962)."Note on a method for calculating corrected sums of squares and products".
- Donald E. Knuth (1998). The Art of Computer Programming, volume 2: Seminumerical Algorithms, 3rd edn.
libcoap: C-Implementation of CoAP
Implémentation en C du protocole CoAP (un protocole REST pour les machines fortement limitées en ressources, pour lequel il existe un mapping avec HTTP), décrit dans la RFC 7252.
En plus du protocole de base, cette librairie implémente les ressources observables (RFC 7641) et la découverte des ressources liées (RFC 6690). Elle implémente aussi certains brouillons, comme l'annuaire de ressources CoAP (https://tools.ietf.org/html/draft-ietf-core-resource-directory-10).
RFC 7252 : https://tools.ietf.org/html/rfc7252
RFC 7641 : https://tools.ietf.org/html/rfc7641
RFC 6690 : https://tools.ietf.org/html/rfc6690
En plus du protocole de base, cette librairie implémente les ressources observables (RFC 7641) et la découverte des ressources liées (RFC 6690). Elle implémente aussi certains brouillons, comme l'annuaire de ressources CoAP (https://tools.ietf.org/html/draft-ietf-core-resource-directory-10).
RFC 7252 : https://tools.ietf.org/html/rfc7252
RFC 7641 : https://tools.ietf.org/html/rfc7641
RFC 6690 : https://tools.ietf.org/html/rfc6690
EXIF Tags
Liste des champs de l'Exchangeable Image File Format (EXIF) décrit de manière synthétique.
Les algorithmes : nouvelles formes de bureaucraties ? | InternetActu
L'essayiste Adam Clair dresse une intéressante comparaison entre algorithme et bureaucratie. Les algorithmes sont paradoxaux rappelle-t-il : « ils sont conçus pour améliorer la prise de décision humaine en supprimant supposément ses biais et ses limites, mais les protocoles analytiques inévitablement réducteurs qu’ils mettent en œuvre se révèlent surtout vulnérables à des formes d’utilisation abusive. » Comme le dit très bien Cathy O’Neil dans son livre : loin d’être neutres et objectifs, « les algorithmes sont des opinions formalisées dans du code ».
On parle bien sur ici des algorithmes dans le sens restreint de prise de décision pour le compte d'une organisation (les États, en l'occurrence). Par définition, donc, les algorithmes ne sont pas une *nouvelle* forme de bureaucratie ; ils en sont une parfaite implémentation. Il est effectivement peu pertinent de s'en prendre aux algorithmes pour critiquer les travers des bureaucratie, tout comme il est peut pertinent de s'en prendre au machine pour critiquer la disparition de l'emploi.
On parle bien sur ici des algorithmes dans le sens restreint de prise de décision pour le compte d'une organisation (les États, en l'occurrence). Par définition, donc, les algorithmes ne sont pas une *nouvelle* forme de bureaucratie ; ils en sont une parfaite implémentation. Il est effectivement peu pertinent de s'en prendre aux algorithmes pour critiquer les travers des bureaucratie, tout comme il est peut pertinent de s'en prendre au machine pour critiquer la disparition de l'emploi.
Géolocalisation des trains
Tous les trains de la SNCF positionnés en temps réel (délai d'environ 5mn) sur une carte interactive.
Tools | Ludum Dare
Liste d'outils utilisés par les participants au Ludum Dare (compétition de développement de jeux vidéo en 48h avec un thème imposé). Il y a de tout, des outils simplifiés (Construct, Game Maker, GDevelop), des moteurs (Unity, Murl), des outils de dessin et de modélisation, etc.
Réparer npm lorsqu'il s'autodétruit
Si, pour une raison inconnue, npm s'autodétruit après une mise à jour globale (npm update -g), il peut s'agir d'un problème lié à une ancienne version.
Réinstallez node (par exemple: brew uninstall --force node && brew install node) puis réinstallez npm en utilisant la version de npm fournie avec node (npm install -g npm).
C'est un problème idiot, mais malheureusement fréquent: https://github.com/npm/npm/issues/4099
Réinstallez node (par exemple: brew uninstall --force node && brew install node) puis réinstallez npm en utilisant la version de npm fournie avec node (npm install -g npm).
C'est un problème idiot, mais malheureusement fréquent: https://github.com/npm/npm/issues/4099
Table des matières: Tout ce que les développeurs devraient savoir sur les performances en SQL
Tout est dans le titre. Il y a beaucoup de choses intéressantes, notamment sur les performances de la pagination et des tris.
Amit’s A* Pages
Beaucoup d'informations et d'expérimentations autour de A* (algorithme de pathfinding dont j'avais déjà parlé là en citant le même blog : http://www.benjaminbillet.fr/news/index.php?link=d5gw4e).
Il y a plusieurs sujets abordés en bas de page, dont la construction de maps dans les jeux vidéos.
Voir aussi: http://www.redblobgames.com
Il y a plusieurs sujets abordés en bas de page, dont la construction de maps dans les jeux vidéos.
Voir aussi: http://www.redblobgames.com
Strong consistency models
Article intéressant sur les modèles de consistances.
Ce blog est une mine d'informations.
Ce blog est une mine d'informations.
World's Smallest h.264 Encoder | Cardinal Peak
Le plus petit encodeur compatible avec la norme d'encodage vidéo H.264.
UserAgentString.com - List of User Agent Strings
Liste d'User-Agent par navigateur. Je n'aurais pas imaginé qu'il puisse en exister autant.
Voir aussi le délirant historique des User-Agent: http://webaim.org/blog/user-agent-string-history
Voir aussi le délirant historique des User-Agent: http://webaim.org/blog/user-agent-string-history
EE Times - 10 FPGA Design Techniques You Should Know
"There are a number of universal design techniques with which FPGA engineers should be familiar -- here are some of the most important."
A lire, ne serait-ce que par curiosité ;)
A lire, ne serait-ce que par curiosité ;)
Blue-Green Deployment
Le déploiement bleu-vert est une technique classique pour déployer une nouvelle version d'un serveur en évitant une interruption de service.
A noter: les tenants de cette technique passent souvent sous silence les problèmes de synchronisation entre les bases de données bleue et verte. La solution la plus radicale consiste à interdire les écritures, pour ne pas avoir à gérer la synchronisation. Ce n'est pas forcément idéal en pratique.
Si l'on souhaite conserver les écritures, alors deux cas se posent:
- le schéma de la base verte est le même que celui de la base bleu : il suffit que le système vert réplique les écritures dans les deux bases.
- le schéma de la base verte est différent de celui de la base bleu : il faut s'assurer que le système vert soit rétro-compatible avec la base bleue, pour pouvoir répliquer les écritures.
Voir aussi: https://www.rainforestqa.com/blog/2014-06-27-zero-downtime-database-migrations/
A noter: les tenants de cette technique passent souvent sous silence les problèmes de synchronisation entre les bases de données bleue et verte. La solution la plus radicale consiste à interdire les écritures, pour ne pas avoir à gérer la synchronisation. Ce n'est pas forcément idéal en pratique.
Si l'on souhaite conserver les écritures, alors deux cas se posent:
- le schéma de la base verte est le même que celui de la base bleu : il suffit que le système vert réplique les écritures dans les deux bases.
- le schéma de la base verte est différent de celui de la base bleu : il faut s'assurer que le système vert soit rétro-compatible avec la base bleue, pour pouvoir répliquer les écritures.
Voir aussi: https://www.rainforestqa.com/blog/2014-06-27-zero-downtime-database-migrations/
Colorful Image Colorization
Cette technique de recolorisation d'image donne des résultats impressionnants
Loading models - Vulkan Tutorial
Vulkan (précedemment connu sous le nom d'OpenGL Next) est une interface de programmation graphique destinée à remplacer OpenGL. Plus moderne et plus efficace, il vise à unifier les versions mobiles (OpenGL ES) et bureau (OpenGL).
Je m'y suis mis pour tester, et c'est clairement un gros dépoussiérage d'OpenGL. Tout est plus clair (simplification), plus direct (suppression des fonctionnalités obsolètes ou redondantes), etc.
Je m'y suis mis pour tester, et c'est clairement un gros dépoussiérage d'OpenGL. Tout est plus clair (simplification), plus direct (suppression des fonctionnalités obsolètes ou redondantes), etc.
git-flow cheatsheet
Comprendre git-flow en une infographie.
Seamless Cloning using OpenCV ( Python , C++ ) | Learn OpenCV
Utilisation du Seamless Clone d'OpenCV pour fusionner deux images.
Face Swap using OpenCV ( C++ / Python ) | Learn OpenCV
Je me suis mis à OpenCV récemment pour développer un outil de redimensionnement d'image avec détection de visage. J'en parlerais peut être dans le blog technique, vu que j'ai rencontré pas mal de soucis avec sa compilation et son binding JNI.
Bref, je suis tombé sur cet article décrivant comment faire du "face swapping" avec la librairie.
Bref, je suis tombé sur cet article décrivant comment faire du "face swapping" avec la librairie.
htop-explique | Le blog de Carl Chenet
Traduction française de l'excellent "htop explained": https://peteris.rocks/blog/htop
The Infinite Drum Machine
Une expérience de classification automatique sur des fichiers audio représentant des sons du quotidien. L'algorithme ne reçoit aucune information à priori (non supervisé) hormis les fichiers audio. La technique utilisée dans cette expérience est t-SNE (t-Distributed Stochastic Neighbor Embedding), permettant de réduire un espace à n dimensions vers un espace plus petit (ici 3 dimensions: X, Y, et couleur).
Description de t-SNE: http://jmlr.org/papers/volume9/vandermaaten08a/vandermaaten08a.pdf
Description de t-SNE: http://jmlr.org/papers/volume9/vandermaaten08a/vandermaaten08a.pdf
How to Write Papers So People Can Read Them - POPL 2016
Comment écrire des articles scientifiques compréhensibles (certains principes généraux s'appliquent pour tout travail d'écriture).
Les slides: https://www.mpi-sws.org/~dreyer/talks/talk-plmw16.pdf
Les slides: https://www.mpi-sws.org/~dreyer/talks/talk-plmw16.pdf
CDNs aren't just for caching - Julia Evans
Un CDN ne sert pas qu'à faire du caching, mais aussi à:
- amener le contenu au plus près des clients, donc accélérer l'accès
- accélérer l'ouverture des connexions TLS (https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_handshake)
- réduire l'impact des attaques par déni de service
- amener le contenu au plus près des clients, donc accélérer l'accès
- accélérer l'ouverture des connexions TLS (https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_handshake)
- réduire l'impact des attaques par déni de service
DBeaver | Free Universal SQL Client
"Free multi-platform database tool for developers, SQL programmers, database administrators and analysts. Supports all popular databases: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, Teradata, MongoDB, Cassandra, Redis, etc."
Et plus stable que MySQL workbench.
Et plus stable que MySQL workbench.
A Year Without a Byte | code.flickr.com
Quelques techniques utilisées par Flickr pour économiser l'espace de stockage.
- Pour éviter des baisses de performance, on conserve toujours un peu d'espace disque libre (traditionnellement 10%). Toutefois, ce paramètre peut être ajusté empiriquement en fonction de l'usage (ici, réduit à 5%)
- Stocker moins de formats de miniature et laisser les clients (webs et mobiles) ajuster la taille de leur côté. Par exemple, si un client a besoin d'afficher une image en 1024x1024px, il va télécharger la version 2048x2048 et effectuer la réduction de son côté.
- Utiliser des algorithmes de compression d'image plus sophistiqués. Ces techniques consomment plus de CPU, mais peuvent réduire significativement la taille des images. Là encore, c'est à voir en fonction du besoin.
- Pour éviter des baisses de performance, on conserve toujours un peu d'espace disque libre (traditionnellement 10%). Toutefois, ce paramètre peut être ajusté empiriquement en fonction de l'usage (ici, réduit à 5%)
- Stocker moins de formats de miniature et laisser les clients (webs et mobiles) ajuster la taille de leur côté. Par exemple, si un client a besoin d'afficher une image en 1024x1024px, il va télécharger la version 2048x2048 et effectuer la réduction de son côté.
- Utiliser des algorithmes de compression d'image plus sophistiqués. Ces techniques consomment plus de CPU, mais peuvent réduire significativement la taille des images. Là encore, c'est à voir en fonction du besoin.
GitHub - tdebatty/java-string-similarity: Implementation of various string similarity and distance algorithms: Levenshtein, Jaro-winkler, n-Gram, Q-Gr
Une librairie Java pour calculer des distances ou des scores de similarité entre des chaînes de caractères.
Algorithmes implémentés :
Levenshtein O(m*n)
Normalized Levenshtein O(m*n)
Weighted Levenshtein O(m*n)
Damerau-Levenshtein O(m*n)
Optimal String Alignment O(m*n)
Jaro-Winkler O(m*n)
Longest Common Subsequence O(m*n)
Metric Longest Common Subsequence O(m*n)
N-Gram O(m*n)
Q-Gram O(m+n)
Cosine similarity O(m+n)
Jaccard index O(m+n)
Sorensen-Dice coefficient O(m+n)
Algorithmes implémentés :
Levenshtein O(m*n)
Normalized Levenshtein O(m*n)
Weighted Levenshtein O(m*n)
Damerau-Levenshtein O(m*n)
Optimal String Alignment O(m*n)
Jaro-Winkler O(m*n)
Longest Common Subsequence O(m*n)
Metric Longest Common Subsequence O(m*n)
N-Gram O(m*n)
Q-Gram O(m+n)
Cosine similarity O(m+n)
Jaccard index O(m+n)
Sorensen-Dice coefficient O(m+n)
FarmBot
FarmBot, un robot pour contrôler une petite plantation. Il peut planter, contrôler l'arrosage, détecter et tuer les mauvaises herbes, etc.
C'est un bien beau bidule, il faut avouer.
Les plans sont open-source, ce qui est un bon point, mais la fabrication des pièces nécessite d'être bien équipé (imprimante 3D, outil de découpe du métal).
Possibilité de commander un kit de pièces pour 3500$, ce qui est malheureusement beaucoup trop cher :/
C'est un bien beau bidule, il faut avouer.
Les plans sont open-source, ce qui est un bon point, mais la fabrication des pièces nécessite d'être bien équipé (imprimante 3D, outil de découpe du métal).
Possibilité de commander un kit de pièces pour 3500$, ce qui est malheureusement beaucoup trop cher :/
Megaprocessor
Traduction de la page d'accueil du projet:
Qu'est-ce que c'est ? Le Megaprocessor est un microprocesseur, mais construit en plus gros. Beaucoup plus gros.
Comment ? Comme tous les processeurs modernes, le Megaprocessor fonctionne avec des transistors. Par contre, au lieu d'utiliser des transistors gravés sur une minuscule puce en silicium, il utilise des transistors individuels (NB: taille équivalente à un cube de 0.5 cm de côté). Par milliers. Et aussi énormément de LED (NB: diode électro-luminescente).
Pourquoi ? Réponse courte : Parce que je le voulais.
Pourquoi ? Réponse longue : Les ordinateurs sont plutôt opaques, il est impossible de comprendre comment ils marchent en regardant à l'intérieur. Ce que j'ai voulu faire, c'est entrer à l'intérieur et voir ce qui se passe. Le souci, c'est qu'on ne peut pas se rétrécir suffisamment pour marcher à l'intérieur d'une puce de silicium. Par contre, on peut faire le contraire : construire un processeur suffisamment gros pour marcher à l'intérieur. En plus, en ajoutant plein de LEDs, on pourrait VOIR les données circuler et les opérations logiques s'effectuer en temps réel. Ce serait génial.
--
Et je confirme : c'est génial. On peut même le programmer avec un assembleur basique (http://megaprocessor.com/programming.html)
Qu'est-ce que c'est ? Le Megaprocessor est un microprocesseur, mais construit en plus gros. Beaucoup plus gros.
Comment ? Comme tous les processeurs modernes, le Megaprocessor fonctionne avec des transistors. Par contre, au lieu d'utiliser des transistors gravés sur une minuscule puce en silicium, il utilise des transistors individuels (NB: taille équivalente à un cube de 0.5 cm de côté). Par milliers. Et aussi énormément de LED (NB: diode électro-luminescente).
Pourquoi ? Réponse courte : Parce que je le voulais.
Pourquoi ? Réponse longue : Les ordinateurs sont plutôt opaques, il est impossible de comprendre comment ils marchent en regardant à l'intérieur. Ce que j'ai voulu faire, c'est entrer à l'intérieur et voir ce qui se passe. Le souci, c'est qu'on ne peut pas se rétrécir suffisamment pour marcher à l'intérieur d'une puce de silicium. Par contre, on peut faire le contraire : construire un processeur suffisamment gros pour marcher à l'intérieur. En plus, en ajoutant plein de LEDs, on pourrait VOIR les données circuler et les opérations logiques s'effectuer en temps réel. Ce serait génial.
--
Et je confirme : c'est génial. On peut même le programmer avec un assembleur basique (http://megaprocessor.com/programming.html)
98 personal data points that Facebook uses to target ads to you - The Washington Post
Facebook utilise 98 informations vous concernant pour déterminer quelles sont les publicités les plus susceptibles de vous intéresser.
9. Ethnic affinity
...
20. Users in long-distance relationships
...
31. Conservatives and liberals
...
45. How much money user is likely to spend on next car
...
79. Users who are “heavy” buyers of beer, wine or spirits
...
82. Users who buy allergy medications, cough/cold medications, pain relief products, and over-the-counter meds
...
89. Users who are “receptive” to offers from companies offering online auto insurance, higher education or mortgages, and prepaid debit cards/satellite TV
Effrayant.
9. Ethnic affinity
...
20. Users in long-distance relationships
...
31. Conservatives and liberals
...
45. How much money user is likely to spend on next car
...
79. Users who are “heavy” buyers of beer, wine or spirits
...
82. Users who buy allergy medications, cough/cold medications, pain relief products, and over-the-counter meds
...
89. Users who are “receptive” to offers from companies offering online auto insurance, higher education or mortgages, and prepaid debit cards/satellite TV
Effrayant.
How to measure smartphone power usage |
Mesurer la consommation électrique d'un smartphone. Testé et approuvé.
Welcome! — Pygments
Pygments, coloration syntaxique (export RTF possible, permettant de copier-coller le code formaté dans une présentation, par exemple).
xkcd: Automation
C'est bien vu. Préférez toujours la réutilisation d'un code existant, une librairie ou un outil plutôt que vos propres codes (qui devront malheureusement être maintenus). Toutes proportions gardées, bien entendu.
Procedural Content Generation in Games | A textbook and an overview of current research
La synthèse procédurale de contenu pour les jeux vidéos est un sujet qui m'intéresse beaucoup. J'en ai fait un tour d'horizon pour la fête de la science à l'INRIA (http://benjaminbillet.fr/wiki/doku.php?id=fete_de_la_science_2012) mais en voici un textbook beaucoup plus complet :)
1 Introduction
2 The search-based approach
3 Constructive generation methods for dungeons and levels
4 Fractals, noise and agents with applications to landscapes and textures
5 Grammars and L-systems with applications to vegetation and levels
6 Rules and mechanics
7 Planning with applications to quests and story
8 ASP with applications to mazes and levels
9 Representations for search-based methods
10 The experience-driven perspective
11 Mixed-initiative approaches
12 Evaluating content generators
On y retrouve de nombreux sujets abordés dans ma présentation, mais avec plus d'excellents chapitres sur la génération de règles, de gameplay, de scénarios et de quêtes.
1 Introduction
2 The search-based approach
3 Constructive generation methods for dungeons and levels
4 Fractals, noise and agents with applications to landscapes and textures
5 Grammars and L-systems with applications to vegetation and levels
6 Rules and mechanics
7 Planning with applications to quests and story
8 ASP with applications to mazes and levels
9 Representations for search-based methods
10 The experience-driven perspective
11 Mixed-initiative approaches
12 Evaluating content generators
On y retrouve de nombreux sujets abordés dans ma présentation, mais avec plus d'excellents chapitres sur la génération de règles, de gameplay, de scénarios et de quêtes.
7 techniques mathématiques
1. La descente de gradient
2. Le kdtree
3. La décomposition en valeurs singulières
4. La dimension de Vapnik-chervonenkis
5. Distributed Stochastic Neighboor Embedding
6. Radial basis Kernel trick
7. Affinity Propagation Clustering
2. Le kdtree
3. La décomposition en valeurs singulières
4. La dimension de Vapnik-chervonenkis
5. Distributed Stochastic Neighboor Embedding
6. Radial basis Kernel trick
7. Affinity Propagation Clustering
Une introduction aux arbres de décision
Résumé :
Les arbres de décision sont l’une des structures de données majeures de l’apprentissage statistique. Leur fonctionnement repose sur des heuristiques qui, tout en satisfaisant l’intuition, donnent des résultats remarquables en pratique (notamment lorsqu’ils sont utilisés en « forêts aléatoires »). Leur structure arborescente les rend également lisibles par un être humain, contrairement à d’autres approches où le prédicteur construit est une « boîte noire ».
L’introduction que nous proposons ici décrit les bases de leur fonctionnement tout en apportant quelques justifications théoriques. Nous aborderons aussi (brièvement) l’extension aux Random Forests. On supposera le lecteur familier avec le contexte général de l’apprentissage supervisé.1
Les arbres de décision sont l’une des structures de données majeures de l’apprentissage statistique. Leur fonctionnement repose sur des heuristiques qui, tout en satisfaisant l’intuition, donnent des résultats remarquables en pratique (notamment lorsqu’ils sont utilisés en « forêts aléatoires »). Leur structure arborescente les rend également lisibles par un être humain, contrairement à d’autres approches où le prédicteur construit est une « boîte noire ».
L’introduction que nous proposons ici décrit les bases de leur fonctionnement tout en apportant quelques justifications théoriques. Nous aborderons aussi (brièvement) l’extension aux Random Forests. On supposera le lecteur familier avec le contexte général de l’apprentissage supervisé.1
GitHub - dokan-dev/dokany: User mode file system library for windows with FUSE Wrapper
Génial, un équivalent à FUSE (Filesystem in Userspace) pour Windows. Il s'agit d'une interface permettant d'écrire des systèmes de fichier "virtuels", c'est-à-dire ne nécessitant pas de modifier le noyau du système d'exploitation pour fonctionner.
C'est une fonctionnalité qui a toujours manqué à Windows.
C'est une fonctionnalité qui a toujours manqué à Windows.
Oh, shit, git!
Une collection d'astuces pour rattraper les (petites) erreurs de manipulation avec git. Par exemple corriger le message d'un commit, amender un commit, etc.
How Not To Sort By Average Rating
Une meilleure méthode pour la gestion des notations. Cette technique prend en compte à la fois la proportion de notes positives et la taille de l'échantillon.
Elm – fun with L-System (Part 1) | theburningmonk.com
Un L-Système ou système de Lindenmayer est une grammaire formelle permettant de décrire un ensemble de règles et de symboles qui modélisent un processus de croissance.
Les symboles représentent l'état de l'être vivant à une itération X, tandis que les règles représentent la transformation des symboles en autres symboles (ou groupes de symboles). A partir de l'état X, les règles permettent de construire l'état X+1 et ainsi de suite jusqu'à obtenir une structure complexe.
J'ai traité le sujet des L-Systèmes lors de la fête de la science 2012 à l'INRIA. Voir ma présentation ici : http://benjaminbillet.fr/wiki/doku.php?id=fete_de_la_science_2012
Voir aussi : http://blog.rabidgremlin.com/2014/12/09/procedural-content-generation-l-systems/
Les symboles représentent l'état de l'être vivant à une itération X, tandis que les règles représentent la transformation des symboles en autres symboles (ou groupes de symboles). A partir de l'état X, les règles permettent de construire l'état X+1 et ainsi de suite jusqu'à obtenir une structure complexe.
J'ai traité le sujet des L-Systèmes lors de la fête de la science 2012 à l'INRIA. Voir ma présentation ici : http://benjaminbillet.fr/wiki/doku.php?id=fete_de_la_science_2012
Voir aussi : http://blog.rabidgremlin.com/2014/12/09/procedural-content-generation-l-systems/
Shadertoy BETA
Un shader est un programme permettant de paramétrer une partie du pipeline de rendu réalisé par une carte graphique ou un moteur de rendu logiciel. Ces programmes sont exécutés directement par le GPU de la machine, étant donné que ces programmes effectuent de nombreuses opérations vectorielles pour lesquelles le GPU est très efficace.
Il existe des shaders de plusieurs types, qui influent sur différentes étapes du pipeline, les plus connus étant les "vertex shaders" (qui influent sur la projection de l'espace 3D sur l'espace 2D) et les "pixel shaders" (qui influent sur les pixels).
Cet outil permet d'écrire des shaders en ligne et de les tester directement. Il y a des choses assez impressionnantes.
Il existe des shaders de plusieurs types, qui influent sur différentes étapes du pipeline, les plus connus étant les "vertex shaders" (qui influent sur la projection de l'espace 3D sur l'espace 2D) et les "pixel shaders" (qui influent sur les pixels).
Cet outil permet d'écrire des shaders en ligne et de les tester directement. Il y a des choses assez impressionnantes.
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.
Home — Doctrine Project
Doctrine, un ORM (object-relational mapper) pour PHP.
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
WTF, HTML and CSS?
Quelques problèmes HTML/CSS courants, et leurs solutions.
An A-Z Index of the Bash command line | SS64.com
An A-Z Index of the Bash command line for Linux.
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.
Maths and Science blog- matthen
Des animations de curiosités mathématiques.
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())));
Git
Ah ah, c'est tellement ça :p
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é."
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.