Journal
Ce journal contient 354 entrées.
Page 2 / 4
A Neural Algorithm of Artistic Style
Allez, ce soir c'est graphisme. Une méthode de machine learning (encore des réseaux neuronaux) permettant d'extraire le style d'une peinture et le reproduire sur des images quelconques.
L'article original : http://arxiv.org/abs/1508.06576
L'article original : http://arxiv.org/abs/1508.06576
Research Blog: Inceptionism: Going Deeper into Neural Networks
Que ce passe t'il lorsque l'on visualise ce qu'un réseau neuronal "apprend" ? Des images psychédéliques à souhait.
Convolution Matrix
La puissance des matrices de convolution, ou comment créer un filtre de flou, de netteté ou d'estampage avec le même algorithme.
How google finds the smartest people to hire
Ce genre de chose détermine autant de chose qu'un microbenchmark dans un langage, c'est à dire rien. La tâche à réaliser est triviale, sans complexité globale, sans rien à analyser ni à comparer, sans optimum à trouver.
Pour trouver des gens talentueux, je préfère les mettre face à des problèmes qui sont :
- trop gros pour être résolu en cinq minutes sur un coin de nappe.
- n'ont pas de solutions connues, et nécessitent donc de raisonner sur des heuristiques ou sur une approche probabiliste.
- des problèmes impossibles, à moins de "relaxer" une contrainte.
- ont une infinité de solutions possibles, dont l'efficacité dépend uniquement des objectifs que l'on se fixe.
- globaux, relatifs à l'architecture plutôt qu'à l'implémentation.
Bien sur, je n'analyse pas le fait que la personne ait fourni une bonne ou une mauvaise réponse (de toute façon, il n'y en a pas dans ces problèmes là), mais plutôt :
- la façon dont elle modélise/formalise le problème, de façon à le comprendre et le résoudre.
- sa capacité à raisonner avec les informations dont elle dispose.
- sa capacité à identifier quelles informations peuvent lui manquer.
- la façon dont elle va chercher ou déduire cette information, la pertinence des questions qu'elle va poser, etc.
Toutes ces choses sont de véritables indicateurs de l'intelligence globale d'un individu et non pas sa capacité à résoudre des problèmes de calcul bestial (voire sa capacité à régurgiter une solution qu'il a lu sur le net dans un top 10 des problèmes stupides posés par les recruteurs). Encore une fois, non, Google n'embauche pas plus de gens intelligents que les autres entreprises, car son processus de recrutement est aussi stupide que celui des autres, le côté cool en plus. Il y a bien des gens intelligents chez Google, mais concrètement il y en aurait aussi dans une entreprise qui sélectionnerait aléatoirement ses candidats.
On ne mesure pas une intelligence avec un algorithme, mais en la confrontant à une autre intelligence.
Pour trouver des gens talentueux, je préfère les mettre face à des problèmes qui sont :
- trop gros pour être résolu en cinq minutes sur un coin de nappe.
- n'ont pas de solutions connues, et nécessitent donc de raisonner sur des heuristiques ou sur une approche probabiliste.
- des problèmes impossibles, à moins de "relaxer" une contrainte.
- ont une infinité de solutions possibles, dont l'efficacité dépend uniquement des objectifs que l'on se fixe.
- globaux, relatifs à l'architecture plutôt qu'à l'implémentation.
Bien sur, je n'analyse pas le fait que la personne ait fourni une bonne ou une mauvaise réponse (de toute façon, il n'y en a pas dans ces problèmes là), mais plutôt :
- la façon dont elle modélise/formalise le problème, de façon à le comprendre et le résoudre.
- sa capacité à raisonner avec les informations dont elle dispose.
- sa capacité à identifier quelles informations peuvent lui manquer.
- la façon dont elle va chercher ou déduire cette information, la pertinence des questions qu'elle va poser, etc.
Toutes ces choses sont de véritables indicateurs de l'intelligence globale d'un individu et non pas sa capacité à résoudre des problèmes de calcul bestial (voire sa capacité à régurgiter une solution qu'il a lu sur le net dans un top 10 des problèmes stupides posés par les recruteurs). Encore une fois, non, Google n'embauche pas plus de gens intelligents que les autres entreprises, car son processus de recrutement est aussi stupide que celui des autres, le côté cool en plus. Il y a bien des gens intelligents chez Google, mais concrètement il y en aurait aussi dans une entreprise qui sélectionnerait aléatoirement ses candidats.
On ne mesure pas une intelligence avec un algorithme, mais en la confrontant à une autre intelligence.
How does Shazam work - Coding Geek
Un article très détaillé sur le fonctionnement de Shazam, le service qui détermine automatiquement le nom d'un morceau de musique à partir de quelques secondes d'enregistrement.
bash - Copy list of files - Super User
Etant donné un fichier "liste.txt" contenant une liste de fichier (un chemin par ligne), cette commande copie chaque fichier dans un dossier donné :
cat liste.txt | xargs -I % cp % dossier_destination
Sur MacOS, -J doit être utilisé à la place de -I :
cat liste.txt | xargs -J % cp % dossier_destination
cat liste.txt | xargs -I % cp % dossier_destination
Sur MacOS, -J doit être utilisé à la place de -I :
cat liste.txt | xargs -J % cp % dossier_destination
Quand un aigle d'Australie abat un drone en plein vol
Une solution au problème des drones ? :)
Bon ok, ça ne vaut probablement pas ces lasers portables à détection automatique :
http://www.boeing.com/features/2015/08/bds-compact-laser-08-15.page
https://www.youtube.com/watch?v=z9TL6sLnjA4
Bon ok, ça ne vaut probablement pas ces lasers portables à détection automatique :
http://www.boeing.com/features/2015/08/bds-compact-laser-08-15.page
https://www.youtube.com/watch?v=z9TL6sLnjA4
How speakers make sound - Animagraffs
Excellente illustration/explication du fonctionnement d'un haut-parleur, tout en animations.
Les données sont-elles si objectives que ça ?
C'est un peu le b.a.-ba des statistiques ou, globalement, du raisonnement. Je cite :
"- Même si les moyens de collecte de données augmentent en volume et en efficacité, il y a trop de paramètres à prendre en compte pour atteindre l'objectivité. Aucune machine, aussi puissante soit-elle, ne pourra jamais capter la complexité du monde dans son ensemble.
- Les données brutes ne servent absolument à rien. Il convient de les trier, de les visualiser, de les mettre en perspective. Or, le tri est un choix, et comme lorsque le journaliste choisit l'angle de son papier, ce choix est éminemment subjectif."
D'où, lorsque l'on reçoit des chiffres mis en forme, l'importance de connaître : (i) les données brutes, (ii) la méthodologie de collecte (taille et nature d'échantillon, protocole expérimental, durée, etc.), (iii) la méthodologie d'interprétation (traitement des données, choix de mise en perspective, etc.) et (iv) le contexte (qui présente ses données et quelles sont ses intentions).
Si l'une de ces informations est manquante, alors les chiffres donnés ne valent rien. Même en présence d'un test statistique (http://www.nature.com/news/scientific-method-statistical-errors-1.14700).
"- Même si les moyens de collecte de données augmentent en volume et en efficacité, il y a trop de paramètres à prendre en compte pour atteindre l'objectivité. Aucune machine, aussi puissante soit-elle, ne pourra jamais capter la complexité du monde dans son ensemble.
- Les données brutes ne servent absolument à rien. Il convient de les trier, de les visualiser, de les mettre en perspective. Or, le tri est un choix, et comme lorsque le journaliste choisit l'angle de son papier, ce choix est éminemment subjectif."
D'où, lorsque l'on reçoit des chiffres mis en forme, l'importance de connaître : (i) les données brutes, (ii) la méthodologie de collecte (taille et nature d'échantillon, protocole expérimental, durée, etc.), (iii) la méthodologie d'interprétation (traitement des données, choix de mise en perspective, etc.) et (iv) le contexte (qui présente ses données et quelles sont ses intentions).
Si l'une de ces informations est manquante, alors les chiffres donnés ne valent rien. Même en présence d'un test statistique (http://www.nature.com/news/scientific-method-statistical-errors-1.14700).
Bases d’ergonomie : notions à connaître et à appliquer
Quelques notions d'ergonomie qui sont plutôt logiques. Toutefois, attention à ne pas prendre les études sur le comportement humain pour argent comptant, et encore moins leurs fameuses "lois". Ces observations sont limitées aux échantillons étudiés et doivent être replacée dans le contexte de leur répétabilité.
How to delete a protected EFI disk partition with Windows 7 or 8
La dernière fois que j'ai installé Debian avec une clé USB, une partition EFI a été crée sur la clé avec pour conséquence de la rendre illisible et impossible à formater avec la méthode usuelle. Sous Windows, il faut en fait passer par l'utilitaire diskpart pour supprimer cette partition avant d'en recréer une nouvelle.
Le futur que Google nous prépare
C'est plutôt vrai. La réussite est une subtile combinaison d'avantages de départ, de chance et de contacts. Le talent n'a pas de très grand impact, sinon beaucoup de gens réussiraient tandis que d'autres ne réussiraient pas.
Ca me rappelle cette excellente planche de Dilbert : http://assets.amuniversal.com/f36fa610f5be013184e0005056a9545d
Ca me rappelle cette excellente planche de Dilbert : http://assets.amuniversal.com/f36fa610f5be013184e0005056a9545d
Three Dead Protocols
Dans le même genre il y a TP, sur le port 17, qui renvoie bêtement un timestamp.
Sinon, cette phrase fait un peu tiquer :
“How does a client talk to a server and how does the server hear it?” Also in the code! It turns out COMPUTERS DO WHAT YOU TELL THEM TO DO.
Justement non, ce n'est pas dans le code, et encore moins dans un code en Python où les interactions clients/serveurs peuvent être simplifiées à l'extrême. Derrière ces bouts de code très simples, il y a toute la mécanique propre aux réseaux qui est est masquée par le système d'exploitation.
Sinon, cette phrase fait un peu tiquer :
“How does a client talk to a server and how does the server hear it?” Also in the code! It turns out COMPUTERS DO WHAT YOU TELL THEM TO DO.
Justement non, ce n'est pas dans le code, et encore moins dans un code en Python où les interactions clients/serveurs peuvent être simplifiées à l'extrême. Derrière ces bouts de code très simples, il y a toute la mécanique propre aux réseaux qui est est masquée par le système d'exploitation.
Order your Squink
Il y a un an j'avais rédigé une petite note sur Squink, une imprimante pour créer des circuits : http://benjaminbillet.fr/news/index.php?link=d5gw4m
Le kickstarter a abouti et l'imprimante est maintenant en vente, malheureusement elle coûte 3000$ (plus les frais de port et frais de douane que j'imagine exorbitant). Même si je trouve toujours l'idée et sa réalisation excellente, c'est au final une très grosse déception du fait de son prix et de la non-ouverture du hardware.
Le kickstarter a abouti et l'imprimante est maintenant en vente, malheureusement elle coûte 3000$ (plus les frais de port et frais de douane que j'imagine exorbitant). Même si je trouve toujours l'idée et sa réalisation excellente, c'est au final une très grosse déception du fait de son prix et de la non-ouverture du hardware.
Drag&Drop HTML pollué par Flash
Il est très probable que ce soit un problème dans l'implémentation du drag&drop de Firefox. Je suppose qu'il doit détecter dans quelles surfaces le drag&drop doit être délégué à un plugin externe (en l’occurrence Flash), mais que cette détection ne doit pas tenir compte de quel onglet est réellement dessiné. Il serait intéressant de voir si le problème persiste (i) lorsque les deux pages sont dans des fenêtres différentes et (ii) lorsque d'autres plugins sont utilisés, comme par exemple une applet Java.
Dans tous les cas, se débarrasser de Flash ne peut être qu'une bonne pratique.
Dans tous les cas, se débarrasser de Flash ne peut être qu'une bonne pratique.
AlchemyVision Demo | AlchemyAPI
Ce système de reconnaissance d'images/extraction de tags est impressionnant.
Alors comme ça tu veux faire du CSV ?
Pourquoi, même pour un format de donnée simple, il est préférable de ne pas écrire ses propres parsers.
Cela dit, si l'on est sur que les données que l'on traite sont propres, un simple split dépanne souvent :)
Cela dit, si l'on est sur que les données que l'on traite sont propres, un simple split dépanne souvent :)
Why you will never escape ads by paying for content · Zen and the Art of Software Development
Traduction rapide et pas forcément exacte :
Internet est, plus que jamais, rempli de publicités. A tel point que les informations qui sont supposées être échangées sur Internet (news, articles, posts, livres, cours, conversations, données) sont aujourd'hui appelées "contenu", un mot fourre-tout qui, pour les publicitaires, signifie généralement "remplissage".
Voilà pourquoi je ne pense pas que payer pour du contenu vous permettra d'échapper à la publicité: si vous avez les moyens de payer pour ce contenu alors vous avez de l'argent, et vous êtes donc une cible de choix pour les publicitaires. Au plus votre pouvoir d'achat sera visible, au plus les publicitaires chercheront à vous cibler. De fait, au plus vous dépenserez d'argent pour faire disparaître la publicité, au plus les publicitaires en dépenseront pour la faire réapparaître. Et vu la façon dont le monde fonctionne aujourd'hui, il semble que vendre des publicités sera toujours plus profitable que vendre du contenu.
Prenons le récent papier d'opinion de Thomas Wells: "Is Advertising Morally Justifiable? The Importance of Protecting Our Attention" [1]. La plupart des publicités modernes ne font plus seulement la promotion d'un produit mais cherchent à "pirater" l'esprit des gens en les amenant à désirer/acheter des produits dont l'intérêt et la valeur est discutable. Peut être que, dans le futur, la diffusion de telles publicités deviendra illégale, tout comme l'est aujourd'hui la diffusion massive de spams et de malwares.
[1] http://www.abc.net.au/religion/articles/2015/07/14/4273200.htm
Internet est, plus que jamais, rempli de publicités. A tel point que les informations qui sont supposées être échangées sur Internet (news, articles, posts, livres, cours, conversations, données) sont aujourd'hui appelées "contenu", un mot fourre-tout qui, pour les publicitaires, signifie généralement "remplissage".
Voilà pourquoi je ne pense pas que payer pour du contenu vous permettra d'échapper à la publicité: si vous avez les moyens de payer pour ce contenu alors vous avez de l'argent, et vous êtes donc une cible de choix pour les publicitaires. Au plus votre pouvoir d'achat sera visible, au plus les publicitaires chercheront à vous cibler. De fait, au plus vous dépenserez d'argent pour faire disparaître la publicité, au plus les publicitaires en dépenseront pour la faire réapparaître. Et vu la façon dont le monde fonctionne aujourd'hui, il semble que vendre des publicités sera toujours plus profitable que vendre du contenu.
Prenons le récent papier d'opinion de Thomas Wells: "Is Advertising Morally Justifiable? The Importance of Protecting Our Attention" [1]. La plupart des publicités modernes ne font plus seulement la promotion d'un produit mais cherchent à "pirater" l'esprit des gens en les amenant à désirer/acheter des produits dont l'intérêt et la valeur est discutable. Peut être que, dans le futur, la diffusion de telles publicités deviendra illégale, tout comme l'est aujourd'hui la diffusion massive de spams et de malwares.
[1] http://www.abc.net.au/religion/articles/2015/07/14/4273200.htm
A Neural Network in 11 lines of Python (Part 1) - i am trask
Introduction aux réseaux neuronaux, à partir de 11 lignes en Python.
Lushprojects.com - Circuit Simulator
Allez, aujourd'hui c'est électronique (voir lien précédent), avec ce petit simulateur de circuits. Ca me rappelle le logiciel Isis qu'on utilisait en cours, que de souvenirs <<
pighixxx.com
Un site consacré à l'électronique, avec divers outils en ligne dont des schémas électroniques pour diverses cartes de prototypage ou mini PC (Arduino, RaspberryPI, etc.).
SoundCity - We are engaging citizens for smarter cities
Mon laboratoire travaille sur les villes intelligentes, notamment sur l'implication du citoyen dans l'analyse de son environnement urbain :
http://urbancivics.com
Une première application mobile vient d'émerger du projet :
"SoundCity est une application de mesure du niveau de bruit ambiant. Elle permet de suivre au cours du temps votre exposition personnelle à la pollution sonore. Les mesures de SoundCity contribuent de plus à une évaluation collaborative du bruit dans la ville.
Du point de vue individuel, l'application permet de quantifier votre exposition au bruit sur différentes échelles de temps (heure, jour et mois) afin de la mettre en regard de votre ressenti et des recommandations en matière de santé."
N'hésitez donc pas à télécharger, les données sont parfaitement anonymisées et seront utilisées pour faire avancer la recherche scientifique : https://play.google.com/store/apps/details?id=fr.inria.mimove.quantifiedself
http://urbancivics.com
Une première application mobile vient d'émerger du projet :
"SoundCity est une application de mesure du niveau de bruit ambiant. Elle permet de suivre au cours du temps votre exposition personnelle à la pollution sonore. Les mesures de SoundCity contribuent de plus à une évaluation collaborative du bruit dans la ville.
Du point de vue individuel, l'application permet de quantifier votre exposition au bruit sur différentes échelles de temps (heure, jour et mois) afin de la mettre en regard de votre ressenti et des recommandations en matière de santé."
N'hésitez donc pas à télécharger, les données sont parfaitement anonymisées et seront utilisées pour faire avancer la recherche scientifique : https://play.google.com/store/apps/details?id=fr.inria.mimove.quantifiedself
Learn OpenGL, extensive tutorial resource for learning Modern OpenGL
Excellent tutoriel sur OpenGL, assez complet et surtout plutôt moderne dans les concepts abordés.
Fragmentation sous Linux - Tutoriels - InfoMars.fr
Le fonctionnement d'un disque dur n'est pas toujours bien compris, avec cette croyance fausse que "Linux ne fragmente pas". Tous les systèmes de fichier fragmentent par définition, certains sont simplement meilleurs que d'autre pour soit atténuer la fragmentation soit effectuer le processus de défragmentation perpétuellement en tâche de fond.
« Les systèmes de fichiers Linux tentent de réécrire complètement chaque fichier sur un autre secteur qui a suffisamment d'espace pour le stocker dans son ensemble. De cette façon, tout est propre, bien rangé et en un seul morceau. Cependant, à cause du confinement de l'espace, cette manœuvre devient plus difficile avec le temps. ».
« Les systèmes de fichiers Linux tentent de réécrire complètement chaque fichier sur un autre secteur qui a suffisamment d'espace pour le stocker dans son ensemble. De cette façon, tout est propre, bien rangé et en un seul morceau. Cependant, à cause du confinement de l'espace, cette manœuvre devient plus difficile avec le temps. ».
/dev/log - Blog technique de Benjamin Billet
J'inaugure une nouvelle partie pour le site : un blog qui me servira à prendre des notes sur mes projets personnels.
Il m'arrive assez régulièrement de lancer des micro-projets sur des thématiques diverses et d'en profiter pour tester des technologies. Pour garder une trace des problèmes rencontrés et des méthodes de résolution, un moteur de blog me permettra de prendre des notes organisées par projets (catégories), ce de manière plus efficace que sur mon journal de liens.
J'inaugure le blog avec le petit projet sur lequel je travaille en ce moment ; un outil pour rechercher des images similaires sur ma machine.
C'est par ici :
http://benjaminbillet.fr/blog
Juste pour info, c'est un PluXml (http://www.pluxml.org), un moteur de blog très simple et sans base de données.
Il m'arrive assez régulièrement de lancer des micro-projets sur des thématiques diverses et d'en profiter pour tester des technologies. Pour garder une trace des problèmes rencontrés et des méthodes de résolution, un moteur de blog me permettra de prendre des notes organisées par projets (catégories), ce de manière plus efficace que sur mon journal de liens.
J'inaugure le blog avec le petit projet sur lequel je travaille en ce moment ; un outil pour rechercher des images similaires sur ma machine.
C'est par ici :
http://benjaminbillet.fr/blog
Juste pour info, c'est un PluXml (http://www.pluxml.org), un moteur de blog très simple et sans base de données.
Be Kind
Résumé rapide : après avoir été mis de côté sur le projet dans lequel il était impliqué, cet ingénieur s'est rendu compte qu'il ne suffit pas d'avoir raison et de dire la vérité, mais qu'il faut aussi la formuler de façon à ce qu'elle puisse être entendue sans heurter : travailler avec d'autres personnes nécessite d'être responsable de son propre impact.
C'est effectivement une bonne chose de s'en rendre compte et, sans doute, une étape prometteuse. Par contre, je connais assez peu de gens qui soient capable de raisonner sur des vérités, la plupart des gens ayant tendance à confondre vérité et opinion personnelle. Une vérité, par définition, tend à être absolue (mesurable, rigoureusement déductible, etc.), tandis qu'une opinion ne peut faire l'objet que de justifications contextualisées.
C'est effectivement une bonne chose de s'en rendre compte et, sans doute, une étape prometteuse. Par contre, je connais assez peu de gens qui soient capable de raisonner sur des vérités, la plupart des gens ayant tendance à confondre vérité et opinion personnelle. Une vérité, par définition, tend à être absolue (mesurable, rigoureusement déductible, etc.), tandis qu'une opinion ne peut faire l'objet que de justifications contextualisées.
1000 !
Totalement inutile mais toujours amusant : ça fait plusieurs années que j'utilise Assembla comme fournisseur de serveur de version et... je suis arrivé au 1000e commit !
http://benjaminbillet.fr/media/assembla_1000_commits.png
http://benjaminbillet.fr/media/assembla_1000_commits.png
Doctorat
Je n'ai plus trop posté ces derniers mois, vu que je finissais mon doctorat. C'est maintenant terminé et mon mémoire de thèse est disponible ici : http://benjaminbillet.fr/media/benjaminbillet_memoire.pdf
square/javapoet · GitHub
Une API pour générer du code Java. Plutôt pratique pour compléter Recoder, dont j'avais parlé il y a longtemps : http://benjaminbillet.fr/news/index.php?link=d5gw1l
Par exemple, le code suivant :
MethodSpec main = MethodSpec.methodBuilder("main")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(void.class)
.addParameter(String[].class, "args")
.addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!")
.build();
TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addMethod(main)
.build();
JavaFile javaFile = JavaFile.builder("com.example.helloworld", helloWorld)
.build();
javaFile.writeTo(System.out);
Génère le code Java suivant :
package com.example.helloworld;
public final class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, JavaPoet!");
}
}
Par exemple, le code suivant :
MethodSpec main = MethodSpec.methodBuilder("main")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(void.class)
.addParameter(String[].class, "args")
.addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!")
.build();
TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addMethod(main)
.build();
JavaFile javaFile = JavaFile.builder("com.example.helloworld", helloWorld)
.build();
javaFile.writeTo(System.out);
Génère le code Java suivant :
package com.example.helloworld;
public final class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, JavaPoet!");
}
}
lorempixel - placeholder images for every case
Un service pour sélectionner des images aléatoirement par taille et par thème. Très simple d'utilisation :
http://lorempixel.com/400/200 : image aléatoire en 400x200 pixels
http://lorempixel.com/g/400/200 : idem, mais en niveaux de gris
http://lorempixel.com/400/200/sports : idem, mais dans la catégorie "sports"
http://lorempixel.com/400/200/sports/Dummy-Text : idem, mais avec un texte affiché sur l'image
http://lorempixel.com/400/200 : image aléatoire en 400x200 pixels
http://lorempixel.com/g/400/200 : idem, mais en niveaux de gris
http://lorempixel.com/400/200/sports : idem, mais dans la catégorie "sports"
http://lorempixel.com/400/200/sports/Dummy-Text : idem, mais avec un texte affiché sur l'image
Comment dessiner avec des pixels ?
Une technique toute bête mais utile pour redessiner quelque chose en pixel art.
Introducing Spot - YouTube
Les robots de Boston Dynamic sont vraiment très efficaces pour se déplacer et se stabiliser, même sur terrain accidenté ou après avoir trébuché/été poussé. Par contre, je ne comprendrais jamais pourquoi ils choisissent toujours de leur donner un design aussi "glauque" : ça me fait penser aux chiens de Resident Evil <<
Visualizing Semantics in Passwords: The Role of Dates
Un papier sur la façon dont les mots de passe sont construits par les utilisateurs à partir de dates diverses (anniversaires, évènements, etc.). 32 millions de mots de passe ont été analysés, selon plusieurs dimensions telles que les dates utilisées le plus souvent, les relations entre les dates et le reste du texte qui constituent le mot de passe, les schémas récurrents (répétitions, premier jour du mois, etc.).
5% des mots de passe analysés étaient uniquement des dates sans texte supplémentaire, et de nombreux schémas ont pu être observés.
5% des mots de passe analysés étaient uniquement des dates sans texte supplémentaire, et de nombreux schémas ont pu être observés.
JSON Diff
Un petit outil en ligne pour afficher en couleur les différences entre deux JSON.
Dioptase: Data Stream Processing for the Future Internet of Things
Oh, mon équipe vient de créer une page dédiée à mon middleware de traitement de flux pour l'Internet des objets.
Continuous processing vs Streaming algorithm
J'ai vu passer ce lien récemment dans mes flux RSS, qui présente l'algorithme de Morris comme le premier "streaming algorithm". C'est peut être une lubie de jeune chercheur borné, mais le terme streaming algorithm constitue un abus de langage malheureusement assez répandu. Le verbe "stream" en anglais courant se traduit en "ruisseler", tandis qu'il est utilisé figurativement en informatique pour désigner la transmission de données en flux continu.
Il ne faut donc pas confondre :
- le flux de données (data stream), qui s'apparente à un modèle de données utilisé dans deux cas : (i) décrire des informations dépendantes du temps et (ii) décrire des jeux de données si grand qu'il est impossible de les stocker. Dans les deux cas, la notion de temps est importante car, à un instant t donné, on ne connaît qu'une infime partie des informations du flux.
- la diffusion de flux (data streaming), qui correspond aux différentes techniques permettant de maintenir un flux de données entre un émetteur et un récepteur. Ces techniques comprennent la diffusion audio/vidéo mais aussi la diffusion de flux d'informations plus "petites" ; par exemple, les mesures produites en continu par des capteurs embarqués.
- le traitement continu/traitement de flux (continous processing/stream processing), qui s'apparente à un modèle de calcul utilisé pour traiter les informations d'un flux au fur et à mesure de leur réception. A un instant t, un opérateur de traitement continu traite la partie connue du flux et produit des résultats qui composeront un nouveau flux de données. C'est à cette catégorie qu'appartient l'algorithme de Morris.
Concrètement, j'ignore pourquoi le terme streaming algorithm est employé à la place de continuous processing algorithm, mais il semble que ce soit passé dans les moeurs malgré sa sémantique discutable. Comme je vois souvent ce terme employé pour des travaux d'algorithmique, j'imagine que les informaticiens théoriques s'intéressent aux problèmes de traitement plutôt qu'aux problèmes de diffusion. Pourtant, si l'on lit les papiers cités comme des streaming algorithms, aucun d'entre eux ne fait référence à ce terme, de près ou de loin :
- Algorithme de Morris : http://www.inf.ed.ac.uk/teaching/courses/exc/reading/morris.pdf
- Alon-Matias-Szegedy sketch (AMS) : http://courses.cs.washington.edu/courses/cse590z/03wi/alonmatiasszegedy.pdf
- Flajolet-Martin sketch (FMS) : http://algo.inria.fr/flajolet/Publications/FlMa85.pdf
- Count-min sketch (CMS) : http://dimacs.rutgers.edu/~graham/pubs/papers/cm-full.pdf (pourtant en 2004 !)
Même Wikipédia s'y laisse prendre : http://en.wikipedia.org/wiki/Streaming_algorithm
Ils citent AMS comme ayant formalisé et popularisé les "streaming algorithms" alors que le papier sur AMS n'emploie jamais ce terme. Dès lors, comment les auteurs auraient pu en formaliser le concept ?
C'est d'autant plus problématique qu'en employant le terme "data streaming" pour ce qui est en réalité du traitement continu, cela induit une confusion entre les problématiques théoriques posées par le traitement continu u et les aspects pratiques liés à la diffusion de flux : maintien et reprise des flux, gestion de l'ordre, détection et correction d'erreurs.
Pour en revenir à l'algorithme de Morris, il appartient à une famille d'algorithme de traitement continu nommée "synopsis methods", ce qui est difficile à traduire (méthode à synopsis ?). La métaphore derrière ces techniques emprunte au cinéma, où un synopsis est un résumé très court d'un scénario : une "synopsis method" est un opérateur qui produit des résultats approchés (avec ou sans erreur bornée) en ne maintenant en mémoire qu'un "résumé" du flux (le synopsis).
Concrètement, l'algorithme de Morris n'est ni plus ni moins qu'un "SELECT COUNT(x) GROUP BY x" approché. Dans le même genre, FMS (Flajolet-Martin sketch) est un "COUNT DISTINCT(x)" approché.
Si vous n'êtes pas trop rebutés par les maths et l'anglais, ce document donne une vue d'ensemble des synopsis methods par types (échantillonnage, sketches, etc.), avec quelques méthodes décrites en détail :
http://charuaggarwal.net/synopsis.pdf
Au final, l'avantage de telles techniques provient de la très faible quantité de mémoire nécessaire mais leur principal défaut réside dans leur ultra-spécialisation ; par exemple, AMS permet de calculer la taille approximative du résultat d'une jointure mais pas le contenu de la jointure elle même.
La littérature sur le traitement continu est donc très riche malgré la "jeunesse" du domaine. C'est cependant un problème majeur dans le traitement des très grands volumes de données, si grands qu'il est impossible de les stocker. Pour donner une idée, Walmart produit plusieurs tera-octets d'évènements RFID... par jour (de 10 à 100 To selon les sources).
Il ne faut donc pas confondre :
- le flux de données (data stream), qui s'apparente à un modèle de données utilisé dans deux cas : (i) décrire des informations dépendantes du temps et (ii) décrire des jeux de données si grand qu'il est impossible de les stocker. Dans les deux cas, la notion de temps est importante car, à un instant t donné, on ne connaît qu'une infime partie des informations du flux.
- la diffusion de flux (data streaming), qui correspond aux différentes techniques permettant de maintenir un flux de données entre un émetteur et un récepteur. Ces techniques comprennent la diffusion audio/vidéo mais aussi la diffusion de flux d'informations plus "petites" ; par exemple, les mesures produites en continu par des capteurs embarqués.
- le traitement continu/traitement de flux (continous processing/stream processing), qui s'apparente à un modèle de calcul utilisé pour traiter les informations d'un flux au fur et à mesure de leur réception. A un instant t, un opérateur de traitement continu traite la partie connue du flux et produit des résultats qui composeront un nouveau flux de données. C'est à cette catégorie qu'appartient l'algorithme de Morris.
Concrètement, j'ignore pourquoi le terme streaming algorithm est employé à la place de continuous processing algorithm, mais il semble que ce soit passé dans les moeurs malgré sa sémantique discutable. Comme je vois souvent ce terme employé pour des travaux d'algorithmique, j'imagine que les informaticiens théoriques s'intéressent aux problèmes de traitement plutôt qu'aux problèmes de diffusion. Pourtant, si l'on lit les papiers cités comme des streaming algorithms, aucun d'entre eux ne fait référence à ce terme, de près ou de loin :
- Algorithme de Morris : http://www.inf.ed.ac.uk/teaching/courses/exc/reading/morris.pdf
- Alon-Matias-Szegedy sketch (AMS) : http://courses.cs.washington.edu/courses/cse590z/03wi/alonmatiasszegedy.pdf
- Flajolet-Martin sketch (FMS) : http://algo.inria.fr/flajolet/Publications/FlMa85.pdf
- Count-min sketch (CMS) : http://dimacs.rutgers.edu/~graham/pubs/papers/cm-full.pdf (pourtant en 2004 !)
Même Wikipédia s'y laisse prendre : http://en.wikipedia.org/wiki/Streaming_algorithm
Ils citent AMS comme ayant formalisé et popularisé les "streaming algorithms" alors que le papier sur AMS n'emploie jamais ce terme. Dès lors, comment les auteurs auraient pu en formaliser le concept ?
C'est d'autant plus problématique qu'en employant le terme "data streaming" pour ce qui est en réalité du traitement continu, cela induit une confusion entre les problématiques théoriques posées par le traitement continu u et les aspects pratiques liés à la diffusion de flux : maintien et reprise des flux, gestion de l'ordre, détection et correction d'erreurs.
Pour en revenir à l'algorithme de Morris, il appartient à une famille d'algorithme de traitement continu nommée "synopsis methods", ce qui est difficile à traduire (méthode à synopsis ?). La métaphore derrière ces techniques emprunte au cinéma, où un synopsis est un résumé très court d'un scénario : une "synopsis method" est un opérateur qui produit des résultats approchés (avec ou sans erreur bornée) en ne maintenant en mémoire qu'un "résumé" du flux (le synopsis).
Concrètement, l'algorithme de Morris n'est ni plus ni moins qu'un "SELECT COUNT(x) GROUP BY x" approché. Dans le même genre, FMS (Flajolet-Martin sketch) est un "COUNT DISTINCT(x)" approché.
Si vous n'êtes pas trop rebutés par les maths et l'anglais, ce document donne une vue d'ensemble des synopsis methods par types (échantillonnage, sketches, etc.), avec quelques méthodes décrites en détail :
http://charuaggarwal.net/synopsis.pdf
Au final, l'avantage de telles techniques provient de la très faible quantité de mémoire nécessaire mais leur principal défaut réside dans leur ultra-spécialisation ; par exemple, AMS permet de calculer la taille approximative du résultat d'une jointure mais pas le contenu de la jointure elle même.
La littérature sur le traitement continu est donc très riche malgré la "jeunesse" du domaine. C'est cependant un problème majeur dans le traitement des très grands volumes de données, si grands qu'il est impossible de les stocker. Pour donner une idée, Walmart produit plusieurs tera-octets d'évènements RFID... par jour (de 10 à 100 To selon les sources).
Unique in the shopping mall: On the reidentifiability of credit card metadata
Une récidive du "MIT Human Dynamics Laboratory" sur le caractère individualisant des données personnelles.
Fin 2013, ils avaient déjà montré que les patterns de mobilité peuvent identifier un individu avec plus de certitudes que ses empreintes digitales : seules 4 positions suffisent à identifier 95% des individus dans un jeu de traces de mobilité (1.5 millions de personnes pendant 15 mois). Cette propriété se vérifie de manière globale puisque 94% des personnes du jeu de données se déplace dans un rayon de 100km seulement en moyenne.
http://www.nature.com/srep/2013/130325/srep01376/full/srep01376.html
Nous apprenons aujourd'hui que seuls 4 achats suffisent à identifier 90% des personnes dans un jeu de transactions par carte bancaire (3 mois, 10000 magasins, 1.1 million de personnes) et ce sans nécessiter de connaître l'heure exacte ; seul le jour est requis.
Tout le problème ici vient du fait que les fameux 4 achats sont assez faciles à connaître, dès lors que les individus publient leurs achats sur les réseaux sociaux. Je me demande cependant quelle est l'impact de la durée du jeu de données sur l'unicité dans ce cas de figure : est-ce que 4 points peuvent identifier une personne pour toute sa vie ?
Globalement, c'est notre manière de penser l'anonymisation des données personnelles qui doit être revue. Supprimer le nom, le prénom, le n° de téléphone et l'adresse ne suffisent pas à rendre les données anonymes.
Fin 2013, ils avaient déjà montré que les patterns de mobilité peuvent identifier un individu avec plus de certitudes que ses empreintes digitales : seules 4 positions suffisent à identifier 95% des individus dans un jeu de traces de mobilité (1.5 millions de personnes pendant 15 mois). Cette propriété se vérifie de manière globale puisque 94% des personnes du jeu de données se déplace dans un rayon de 100km seulement en moyenne.
http://www.nature.com/srep/2013/130325/srep01376/full/srep01376.html
Nous apprenons aujourd'hui que seuls 4 achats suffisent à identifier 90% des personnes dans un jeu de transactions par carte bancaire (3 mois, 10000 magasins, 1.1 million de personnes) et ce sans nécessiter de connaître l'heure exacte ; seul le jour est requis.
Tout le problème ici vient du fait que les fameux 4 achats sont assez faciles à connaître, dès lors que les individus publient leurs achats sur les réseaux sociaux. Je me demande cependant quelle est l'impact de la durée du jeu de données sur l'unicité dans ce cas de figure : est-ce que 4 points peuvent identifier une personne pour toute sa vie ?
Globalement, c'est notre manière de penser l'anonymisation des données personnelles qui doit être revue. Supprimer le nom, le prénom, le n° de téléphone et l'adresse ne suffisent pas à rendre les données anonymes.
A tutorial on how to get into an admin account on ANY computer. - Imgur
Le hack "sethc" est une technique bien connue qui permet d'activer ou d'exploiter un compte administrateur local sans avoir à fournir de login/mdp, en remplaçant sethc.exe par cmd.exe, soit grâce à un live CD de Linux soit en passant directement par la restauration système. sethc.exe gère les "sticky/filter keys", qui permettent d'utiliser des raccourcis clavier par pression successive des touches plutôt que par pression simultanée.
Comme toutes les options d'accessibilité sont paramétrables par tout utilisateur dès l'écran de login, les seules "contres" possibles consistent à aller bidouiller dans le système :
http://www.askvg.com/how-to-remove-branding-logo-and-ease-of-access-accessibility-button-from-windows-vista-and-7-login-screens
De manière générale, à partir du moment où il y a un accès physique à la machine, la sécurité est sérieusement compromise. Seul le chiffrement du disque peut apporter une certaine protection.
Comme toutes les options d'accessibilité sont paramétrables par tout utilisateur dès l'écran de login, les seules "contres" possibles consistent à aller bidouiller dans le système :
http://www.askvg.com/how-to-remove-branding-logo-and-ease-of-access-accessibility-button-from-windows-vista-and-7-login-screens
De manière générale, à partir du moment où il y a un accès physique à la machine, la sécurité est sérieusement compromise. Seul le chiffrement du disque peut apporter une certaine protection.
Why I don’t like hackathons
Les hackathons sont des évènements à la mode où des groupes réduits de développeurs se réunissent et construisent un projet en quelques jours non-stop, parfois autour d'une thématique particulière.
L'idée ici est de créer une émulation basée sur la courte durée, le challenge et la compétition, de façon à permettre aux développeurs de produire vite (et mal) un prototype d'application innovante.
Si l'on peut adhérer au principe, je rejoins l'auteur de l'article sur la plupart des points :
- Les projets à long terme sont plus intéressants et plus utiles, un projet sorti d'un hackathon finit généralement à la poubelle à la fin de la compétition.
- Il serait préférable de faire coopérer les équipes plutôt que de les mettre en compétition : ce serait, d'ailleurs, un véritable challenge :).
- Aucun intérêt à se bousiller la santé gratuitement sur un projet jetable ; si l'on veut s'investir à fond sur des projets innovants, de nombreuses startups cherchent des talents.
- Les critères de sélection des gagnants sont obscurs et l'on assiste souvent à un concours de slides plutôt qu'à un concours de prototypes.
Par ailleurs, une variante bien franco-française consiste à exploiter les hackathons pour collecter des idées innovantes à moindre coût. C'est un peu une version moderne des concours, avec cette fois-ci des prototypes à la clé.
L'idée ici est de créer une émulation basée sur la courte durée, le challenge et la compétition, de façon à permettre aux développeurs de produire vite (et mal) un prototype d'application innovante.
Si l'on peut adhérer au principe, je rejoins l'auteur de l'article sur la plupart des points :
- Les projets à long terme sont plus intéressants et plus utiles, un projet sorti d'un hackathon finit généralement à la poubelle à la fin de la compétition.
- Il serait préférable de faire coopérer les équipes plutôt que de les mettre en compétition : ce serait, d'ailleurs, un véritable challenge :).
- Aucun intérêt à se bousiller la santé gratuitement sur un projet jetable ; si l'on veut s'investir à fond sur des projets innovants, de nombreuses startups cherchent des talents.
- Les critères de sélection des gagnants sont obscurs et l'on assiste souvent à un concours de slides plutôt qu'à un concours de prototypes.
Par ailleurs, une variante bien franco-française consiste à exploiter les hackathons pour collecter des idées innovantes à moindre coût. C'est un peu une version moderne des concours, avec cette fois-ci des prototypes à la clé.
[code] Trouver les erreurs - LinuxFr.org
En référence à Heartbleed (voir http://benjaminbillet.fr/news/index.php?link=d5gw3m), voilà un petit récapitulatif/comparatif des méthodes de détection d'erreur dans les programmes informatiques.
On y apprend notamment que le taux d'erreur varie, en général, entre 1 et 25 défauts pour 1000 lignes de code, qu'un développeur de la NASA détecte 3 erreurs par heure d'effort et que 80% des erreurs se trouvent dans 20% du code.
On y apprend notamment que le taux d'erreur varie, en général, entre 1 et 25 défauts pour 1000 lignes de code, qu'un développeur de la NASA détecte 3 erreurs par heure d'effort et que 80% des erreurs se trouvent dans 20% du code.
Scotty: Relocating Physical Objects Across Distances Using Destructive Scanning, Encryption, and 3D Printing
Idée absurde, gaspillage des matériaux, régression technologique. Je crois que nous avons des candidats pour un IG Nobel :)
Des infos ici, pour ceux qui ne pourraient pas accéder au papier : http://www.numerama.com/magazine/31978-teleporter-des-objets-pour-eviter-de-les-copier.html
Des infos ici, pour ceux qui ne pourraient pas accéder au papier : http://www.numerama.com/magazine/31978-teleporter-des-objets-pour-eviter-de-les-copier.html
The Hitchhiker’s Guide to Python! — The Hitchhiker's Guide to Python
Bien démarrer en Python : versions, environnements, structurer un projet, bonnes pratiques, apprentissage par scénarios, etc.
abnfgen - ABNF-grammar test case generator
Cet utilitaire permet de générer des cas aléatoires qui satisfont une grammaire ABNF donnée.
$ cat grammar.txt
ring = 1*12("ding" SP) "dong" CRLF
$ ./abnfgen grammar.txt
DInG DiNg doNg
ABNF (Augmented Backus-Naur form) est une notation permettant de décrire les règles syntaxiques d'un langage non-contextuel. Non-contextuel signifie ici que l'interprétation d'une variable ne dépend pas des éléments qui la précédent ou lui succèdent.
A noter que ABNF est la notation standard utilisée dans les RFC.
http://en.wikipedia.org/wiki/Augmented_Backus–Naur_Form
$ cat grammar.txt
ring = 1*12("ding" SP) "dong" CRLF
$ ./abnfgen grammar.txt
DInG DiNg doNg
ABNF (Augmented Backus-Naur form) est une notation permettant de décrire les règles syntaxiques d'un langage non-contextuel. Non-contextuel signifie ici que l'interprétation d'une variable ne dépend pas des éléments qui la précédent ou lui succèdent.
A noter que ABNF est la notation standard utilisée dans les RFC.
http://en.wikipedia.org/wiki/Augmented_Backus–Naur_Form
Ceci n'est pas un blog: Le challenge du logo ANSSI
Le logo de l'ANSSI (agence nationale de la sécurité des systèmes d'information) recélait divers challenges, à l'image de la sculpture Kryptos de la CIA.
Concepts mis en œuvre :
- stéganographie sur bits de poids faibles
- contrôle de redondance cyclique CRC32
- architecture de la Game Boy (ah ah, vous voyez que ça sert !)
- cryptographie : RSA, AES, chiffre de Vigenère, codage par substitution, chiffre ADFGVX
- cryptanalyse : analyse fréquentielle, test de Kasiski, Pollard P-1
On notera aussi la présence d'un peu de poésie française. A la différence du challenge Kryptos, dont l'une des quatre parties n'est toujours pas résolue depuis 1990, le challenge de l'ANSSI aura été résolu en 2 ans. Peut mieux faire :)
Concepts mis en œuvre :
- stéganographie sur bits de poids faibles
- contrôle de redondance cyclique CRC32
- architecture de la Game Boy (ah ah, vous voyez que ça sert !)
- cryptographie : RSA, AES, chiffre de Vigenère, codage par substitution, chiffre ADFGVX
- cryptanalyse : analyse fréquentielle, test de Kasiski, Pollard P-1
On notera aussi la présence d'un peu de poésie française. A la différence du challenge Kryptos, dont l'une des quatre parties n'est toujours pas résolue depuis 1990, le challenge de l'ANSSI aura été résolu en 2 ans. Peut mieux faire :)
Java for Everything
Les critiques récurrentes envers Java sont, la plupart du temps, infondées. Celle de la verbosité est particulièrement absurde, le concept d'autocomplétion est plus vieux que moi. On retrouve aussi le grand débat "bytecode interprété vs. code compilé", qui n'intéresse que ceux qui ignorent l'existence des mécanismes de compilation à la volée. Java est un langage qui évolue depuis sa création, aussi bien au niveau de sa syntaxe (p. ex. l'opérateur diamant, le multicatch, le try-with-resource, les lambda) que de son SDK (p. ex. NIO, streams, gestion de la concurrence), mais il continue à être jugé sous le prisme de ses premières versions.
Globalement, et cela est vrai pour tout langage, les critiques portent soit (i) sur la façon dont les logiciels sont implémentés en utilisant le langage, soit (ii) sur des points de détail plus ou moins significatifs. Ce sont ces détails qui permettront, justement, de déterminer le meilleur langage en fonction des besoins.
La question "quel est votre langage de programmation préféré" est particulièrement intéressante. Apprendre un langage, c'est assez facile, mais maîtriser son écosystème (librairies, techniques avancées, environnements d'exécution, compilateurs, débogueurs, etc.) est un exercice long et complexe. D'où des développeurs qui vont finalement toujours utiliser leurs langages/outils préférés dans n'importe quelle situation et inventer des arguments abracadabrantesques pour justifier leurs choix (ou invalider celui des autres).
A la vérité, je n'ai pas encore trouvé un "bon" langage, tous ceux que j'ai essayé et que j'utilise au quotidien sont tout juste "potables". A un moment donné ou à un autre, tous ces langages m'ont agacés pour tel ou tel problème de syntaxe, de logique, de performance ou d'incomplétude. Le langage idéal, à mon sens, est celui qui permet de décrire rapidement les idées (concrètes) que l'on cherche à implémenter sans forcément avoir à gérer les limitations propres aux structures du langage, à ses primitives, à ses librairies et à son environnement. Peut être y a t'il de l'espoir dans les domain-specific language, du fait de leur spécialisation.
Globalement, et cela est vrai pour tout langage, les critiques portent soit (i) sur la façon dont les logiciels sont implémentés en utilisant le langage, soit (ii) sur des points de détail plus ou moins significatifs. Ce sont ces détails qui permettront, justement, de déterminer le meilleur langage en fonction des besoins.
La question "quel est votre langage de programmation préféré" est particulièrement intéressante. Apprendre un langage, c'est assez facile, mais maîtriser son écosystème (librairies, techniques avancées, environnements d'exécution, compilateurs, débogueurs, etc.) est un exercice long et complexe. D'où des développeurs qui vont finalement toujours utiliser leurs langages/outils préférés dans n'importe quelle situation et inventer des arguments abracadabrantesques pour justifier leurs choix (ou invalider celui des autres).
A la vérité, je n'ai pas encore trouvé un "bon" langage, tous ceux que j'ai essayé et que j'utilise au quotidien sont tout juste "potables". A un moment donné ou à un autre, tous ces langages m'ont agacés pour tel ou tel problème de syntaxe, de logique, de performance ou d'incomplétude. Le langage idéal, à mon sens, est celui qui permet de décrire rapidement les idées (concrètes) que l'on cherche à implémenter sans forcément avoir à gérer les limitations propres aux structures du langage, à ses primitives, à ses librairies et à son environnement. Peut être y a t'il de l'espoir dans les domain-specific language, du fait de leur spécialisation.
Thingsee One: The Smart Developer Device by Haltian — Kickstarter
Encore un autre projet intéressant pour l'Internet of Things (IoT), actuellement en campagne sur kickstarter (quasiment terminé)
https://www.kickstarter.com/projects/haltian/thingsee-one-the-smart-developer-device-for-mobile
https://www.kickstarter.com/projects/haltian/thingsee-one-the-smart-developer-device-for-mobile
New Bluetooth devices will connect directly to the internet
Intéressante avancée dans le Bluetooth, où les objets pourront directement se connecter à Internet au travers d'un point d'accès. Il faudra cependant attendre que la spécification soit diffusée car il me paraît étrange que ça puisse fonctionner sans disposer au minimum d'un point d'accès compatible.
countercomplex: Algorithmic symphonies from one line of code -- how and why?
Synthèse audio en quelques lignes de code. Intéressant, mais il faut aimer la musique 8-bit :p
Un autre regard sur le C++
Un professeur de C/C++ que j'ai eu en école d'ingénieur a finalement publié ses cours sous la forme d'un bouquin auto-édité. Je n'ai pas lu ce livre là spécialement, mais la version qu'il nous avait fourni pendant son cours était particulièrement détaillée, complète et didactique. Idéal pour aborder le langage C++ en profondeur.
Le sommaire peut être consulté ici : https://www.facebook.com/pages/Un-autre-regard-sur-le-CPP/358770564300621
Remarque : le livre n'est pas destiné aux débutants purs, une connaissance préalable du C est requise.
Le sommaire peut être consulté ici : https://www.facebook.com/pages/Un-autre-regard-sur-le-CPP/358770564300621
Remarque : le livre n'est pas destiné aux débutants purs, une connaissance préalable du C est requise.
Ivre, l'ARCEP tente de mesurer la qualité de service de votre Internet - Korben
Le choix fait par l'ARCEP est d'autant plus absurde qu'il existe, en France et en Europe, des initiatives pour l'analyse de la qualité de service du réseau Internet. On pourra citer, notamment, le projet ATLAS du RIPE NCC (Réseaux IP Européens - Network Coordination Centre) qui propose des sondes à installer chez soi, envoyées gratuitement à la demande (sans frais de port). Ces sondes analysent la qualité des liaisons (ping, RTT, débit, reachability, etc.), notamment avec les DNS. Cerise sur le gâteau, les statistiques et les données collectées sont ouvertes.
https://atlas.ripe.net
Il aurait été judicieux, de la part de l'ARCEP, de se rapprocher d'une telle initiative pour mettre en place ses propres mécanismes de mesure directement chez l'utilisateur et non pas chez les fournisseurs d'accès, qui risquent d'influer sur leurs propres résultats.
https://atlas.ripe.net
Il aurait été judicieux, de la part de l'ARCEP, de se rapprocher d'une telle initiative pour mettre en place ses propres mécanismes de mesure directement chez l'utilisateur et non pas chez les fournisseurs d'accès, qui risquent d'influer sur leurs propres résultats.
Regulex:JavaScript Regular Expression Visualizer.
Regulex, un outil pour visualiser les expressions rationnelles sous la forme d'automates
java-design-patterns/ at master · iluwatar/java-design-patterns · GitHub
Les différents design patterns du GoF, en Java. Les modèles UML s'appliquent, en principe, à n'importe quel langage.
Le livre original : http://www.amazon.com/Design-Patterns-Object-Oriented-Professional-Computing/dp/0201634988
Le livre original : http://www.amazon.com/Design-Patterns-Object-Oriented-Professional-Computing/dp/0201634988
Paperity - Multidisciplinary aggregator of Open Access journals & papers
Un moteur de recherche pour les articles scientifiques en "open access".
Karotz: cette fois les carottes sont cuites ! - Maison et Domotique
Je n'aime pas beaucoup le travail de la société Aldebaran de manière générale, en cela qu'elle gâche un potentiel énorme dans des jouet-robots moyennement utiles alors que l'on a besoin, en France, d'un acteur fort de l'Internet des objets. Du retour que j'en ai d'autres scientifiques, par ailleurs, leurs robots sont abominables à programmer.
Ceci mis à part, oui, c'est ce que je défends dans mon travail sur l'IoT : les approches intégralement basées sur le cloud (cloud of things, things as a service, sensors and actuators as a service, etc.) ne sont pas pérennes et représentent un danger non négligeable pour le futur. Dans ce cas spécifique, ce n'est pas bien grave, on parle juste d'un bidule un peu inutile qui peut vous jouer de la musique, bouger les oreilles, filmer et donner la météo : qu'il se transforme, une fois les serveurs stoppés, en un joli presse papier très coûteux n'a qu'un impact négligeable.
Par contre, si demain ce même type d'appareils contrôle le chauffage et l'éclairage, les dangers relatifs à un arrêt complet seront considérables, en tout cas tant qu'une législation stricte sur la continuité des services ne sera pas adoptée. Cela ne se fera pas tant qu'il n'y aura pas eu quelques accidents.
Outre le risque se pose la question de l'utilité technique. Aucune des fonctionnalités de cet appareil ne requièrent un serveur spécifique situé chez le constructeur ; seul un boîtier chez l'utilisateur suffirait. On peut questionner l'intérêt de doter les appareils connectés d'une telle quantité de ressources matérielles si c'est, au final, pour ne pas les utiliser.
Enfin, on peut aussi questionner la démarche du constructeur qui aurait pu, au minimum, libérer les sources des logiciels serveurs devenus inutiles. Cependant, à la question "l'open source est il envisagé ?" le constructeur répond qu'il y réfléchit mais que sans investissement de leur part l'Open Source ne serait pas viable. Cette réponse est au mieux absurde, au pire malhonnête.
http://www.karotz.com/support/faq?locale=fr_FR
Ceci mis à part, oui, c'est ce que je défends dans mon travail sur l'IoT : les approches intégralement basées sur le cloud (cloud of things, things as a service, sensors and actuators as a service, etc.) ne sont pas pérennes et représentent un danger non négligeable pour le futur. Dans ce cas spécifique, ce n'est pas bien grave, on parle juste d'un bidule un peu inutile qui peut vous jouer de la musique, bouger les oreilles, filmer et donner la météo : qu'il se transforme, une fois les serveurs stoppés, en un joli presse papier très coûteux n'a qu'un impact négligeable.
Par contre, si demain ce même type d'appareils contrôle le chauffage et l'éclairage, les dangers relatifs à un arrêt complet seront considérables, en tout cas tant qu'une législation stricte sur la continuité des services ne sera pas adoptée. Cela ne se fera pas tant qu'il n'y aura pas eu quelques accidents.
Outre le risque se pose la question de l'utilité technique. Aucune des fonctionnalités de cet appareil ne requièrent un serveur spécifique situé chez le constructeur ; seul un boîtier chez l'utilisateur suffirait. On peut questionner l'intérêt de doter les appareils connectés d'une telle quantité de ressources matérielles si c'est, au final, pour ne pas les utiliser.
Enfin, on peut aussi questionner la démarche du constructeur qui aurait pu, au minimum, libérer les sources des logiciels serveurs devenus inutiles. Cependant, à la question "l'open source est il envisagé ?" le constructeur répond qu'il y réfléchit mais que sans investissement de leur part l'Open Source ne serait pas viable. Cette réponse est au mieux absurde, au pire malhonnête.
http://www.karotz.com/support/faq?locale=fr_FR
Ce que Google sait de vous… parce que vous le lui donnez - Framablog
Attention à ne pas confondre non plus ce que Google dit savoir de vous et ce que Google sait réellement de vous. Par exemple, d'après ces pages, Google ne sait pas grand chose sur moi et se plante complètement dans l'identification de mon âge ou de mes préférences. Par contre, nous savons que les outils de tracking de Google sont disponibles sur quasiment tous les sites Web, sous la forme de publicités AdSense, de boutons +1 et de collecte Analytics. Un seul cookie et c'est l'ensemble des informations sur la navigation Web d'un individu qui est collectée, ce que ces pages ne montrent pas. De la même façon, je doute que l'historique des recherches sur Google soit *réellement* supprimé des serveurs lorsque vous désactivez Web History.
Ignorer rapidement plusieurs fichiers en ligne de commande dans subversion
Liste les fichiers non versionnés et les ajoute au fichier "ignore.txt"
svn status | grep "^\?" | awk "{print \$2}" > ignore.txt
Ignore la liste des fichiers contenus dans "ignore.txt"
svn propset svn:ignore -F ignore.txt .
Simple et efficace.
svn status | grep "^\?" | awk "{print \$2}" > ignore.txt
Ignore la liste des fichiers contenus dans "ignore.txt"
svn propset svn:ignore -F ignore.txt .
Simple et efficace.
China just blocked thousands of websites | GreatFire.org - Liens en vrac de sebsauvage
Eh oui, il ne faut pas oublier que le cloud est avant tout un système décentralisé à très grande échelle, conçu pour être élastique et résilient. Seuls la gestion et l'accès sont centralisés et c'est le plus souvent cette idée d'accès centralisé qui est critiquée car sujette à la censure/surveillance de la part de l'opérateur de cloud.
La Chine a fait ici un choix étrange, consistant à censurer l'opérateur entier, alors que celui-ci est en principe soumis aux lois du pays (et donc à une censure au cas par cas).
La Chine a fait ici un choix étrange, consistant à censurer l'opérateur entier, alors que celui-ci est en principe soumis aux lois du pays (et donc à une censure au cas par cas).
Comparatif : les imprimantes 3D à dépôt de filament fondu
Un test de trois imprimantes 3D à dépôt de filament fondu, destinées au grand public (entre 1000€ et 2000€ quand même).
Les résultats sont globalement assez décevant en ce qui concerne la qualité des pièces imprimées.
Les résultats sont globalement assez décevant en ce qui concerne la qualité des pièces imprimées.
Tech Tip: Extract Pages From a PDF | Linux Journal
Quelques méthodes pour extraire une ou plusieurs portions d'un PDF.
Il existe aussi des outils en mode graphique pour Linux (pdfedit, master pdf editor, etc.) mais ils ne sont vraiment pas au point : crash, PDF corrompus, bugs, etc.
Il existe aussi des outils en mode graphique pour Linux (pdfedit, master pdf editor, etc.) mais ils ne sont vraiment pas au point : crash, PDF corrompus, bugs, etc.
Amélioration de Ginger
Petite amélioration sur mon moteur de liens Ginger, j'y ai ajouté un nuage de tag. C'est disponible ici : http://benjaminbillet.fr/news/tag.php
Voir aussi : http://benjaminbillet.fr/wiki/doku.php?id=ginger
Voir aussi : http://benjaminbillet.fr/wiki/doku.php?id=ginger
Un petit guide pour la sécurité
Un guide de sécurité informatique, avec pas mal de choses tout niveaux confondus (des bases, mais aussi des concepts d'attaques et protection plus avancés)
C'est relativement vieux (2003) mais très détaillé.
C'est relativement vieux (2003) mais très détaillé.
Linear Programming: Introduction
Une introduction aux problèmes d'optimisation linéaire, c'est-à-dire des problème d'optimisation dont la fonction objectif ainsi que les contraintes sont décrites sous la forme de fonctions linéaires.
Il existe aussi certaines formes, où les variables de décision ne peuvent prendre que des valeurs entières ou binaires. Ces dernières sont connues pour être très difficile à résoudre.
Voir aussi le livre "Practical Optimization: A Gentle Introduction" que l'on peut trouver gratuitement sur le site de l'auteur.
http://www.sce.carleton.ca/faculty/chinneck/po/
Il existe aussi certaines formes, où les variables de décision ne peuvent prendre que des valeurs entières ou binaires. Ces dernières sont connues pour être très difficile à résoudre.
Voir aussi le livre "Practical Optimization: A Gentle Introduction" que l'on peut trouver gratuitement sur le site de l'auteur.
http://www.sce.carleton.ca/faculty/chinneck/po/
Les prises RJ45 ne seront plus imposées dans les logements neufs
C'est une décision absurde, qui montre bien que le gouvernement tiens un double discours vis-à-vis du numérique. D'un côté, on nous parle de l'Internet des objets comme un sujet d'avenir (et un moteur de croissance !) et de l'autre on régresse sur la mise en place des technologies qui sont indispensables à sa réalisation.
Câbler les environnements, avec du RJ45 ou autre chose, est une bonne pratique. En effet, nous ignorons quels seront nos besoins dans 20 ou 50 ans : aujourd'hui, les véhicules autonomes seraient bien plus avancés si, il y a 50 ans, on avait introduit l'infrastructure de communication nécessaire dans les autoroutes.
Cette décision est d'autant plus irrationnelle que, dans le budget alloué à la construction d'un logement neuf, le coût de câblage est négligeable. Que représentent 500€ de plus ou de moins sur des constructions qui en valent des centaines de milliers ?
Câbler les environnements, avec du RJ45 ou autre chose, est une bonne pratique. En effet, nous ignorons quels seront nos besoins dans 20 ou 50 ans : aujourd'hui, les véhicules autonomes seraient bien plus avancés si, il y a 50 ans, on avait introduit l'infrastructure de communication nécessaire dans les autoroutes.
Cette décision est d'autant plus irrationnelle que, dans le budget alloué à la construction d'un logement neuf, le coût de câblage est négligeable. Que représentent 500€ de plus ou de moins sur des constructions qui en valent des centaines de milliers ?
Gestion des cas d'erreur : les exceptions
De bonnes pratiques pour la gestion des exceptions vérifiées/non vérifiées.
Toutefois, les exceptions non vérifiées, c'est-à-dire celles que le développeur n'est pas obligé de gérer pour pouvoir compiler son programme, posent un problème majeur : on ignore, à tout moment, quelles exceptions vont être retournées par les méthodes que l'on invoque.
Lorsqu'un programme devient assez gros, la plupart des méthodes font appels à d'autres méthodes et ainsi de suite. Si les librairies ne documentent pas précisément quelles sont les exceptions non vérifiées qui peuvent être lancées, alors il n'y a qu'à l'exécution que l'on se rendra compte que des erreurs surviennent en masse.
Toutefois, les exceptions non vérifiées, c'est-à-dire celles que le développeur n'est pas obligé de gérer pour pouvoir compiler son programme, posent un problème majeur : on ignore, à tout moment, quelles exceptions vont être retournées par les méthodes que l'on invoque.
Lorsqu'un programme devient assez gros, la plupart des méthodes font appels à d'autres méthodes et ainsi de suite. Si les librairies ne documentent pas précisément quelles sont les exceptions non vérifiées qui peuvent être lancées, alors il n'y a qu'à l'exécution que l'on se rendra compte que des erreurs surviennent en masse.
Writing a Simple Operating System from Scratch, by Nick Blundell
Les systèmes d'exploitation sont des composants fondamentaux de nos ordinateurs, qui gèrent le matériel et fournissent aux utilisateurs des abstractions de haut niveau pour interagir avec celui-ci.
Ce document introduit, en "seulement" 77 pages, les concepts fondamentaux d'un système d'exploitation au niveau le plus bas : boot, gestion des entrées-sorties (souris, clavier, écran, etc.), système de fichier, processus, etc.
Tant qu'on est à parler de systèmes d'exploitation, la référence incontournable de ce domaine reste le livre "Operating System" d'Andrew S. Tanenbaum, le concepteur du micro-noyau de MINIX
http://fr.wikipedia.org/wiki/Andrew_Tanenbaum
Le livre de Tanenbaum est un pavé (>500 pages) très bien écrit et la traduction en français, "Systèmes d'exploitation", est de bonne qualité elle aussi. Le livre aborde l'ensemble des aspects d'un OS : gestion de la mémoire (adressage, pagination, etc.), gestion des entrées-sorties et des périphériques, systèmes de fichier, multi-tâche (thread, processus, ordonnancement, IPC), etc.
Des sujets connexes sont aussi traités, comme l'encodage et le décodage audio-vidéo, la compression, la virtualisation, la sécurité, etc.
D'ailleurs, coïncidence rigolote, Tanenbaum donnera une conférence sur MINIX3 à l'UPMC (campus de Jussieu) le 28 octobre prochain : http://colloquium.lip6.fr/Tanenbaum-2014-10-28
La conférence est destinée à un public large, ouverte à tous, et se tiendra en anglais.
Ce document introduit, en "seulement" 77 pages, les concepts fondamentaux d'un système d'exploitation au niveau le plus bas : boot, gestion des entrées-sorties (souris, clavier, écran, etc.), système de fichier, processus, etc.
Tant qu'on est à parler de systèmes d'exploitation, la référence incontournable de ce domaine reste le livre "Operating System" d'Andrew S. Tanenbaum, le concepteur du micro-noyau de MINIX
http://fr.wikipedia.org/wiki/Andrew_Tanenbaum
Le livre de Tanenbaum est un pavé (>500 pages) très bien écrit et la traduction en français, "Systèmes d'exploitation", est de bonne qualité elle aussi. Le livre aborde l'ensemble des aspects d'un OS : gestion de la mémoire (adressage, pagination, etc.), gestion des entrées-sorties et des périphériques, systèmes de fichier, multi-tâche (thread, processus, ordonnancement, IPC), etc.
Des sujets connexes sont aussi traités, comme l'encodage et le décodage audio-vidéo, la compression, la virtualisation, la sécurité, etc.
D'ailleurs, coïncidence rigolote, Tanenbaum donnera une conférence sur MINIX3 à l'UPMC (campus de Jussieu) le 28 octobre prochain : http://colloquium.lip6.fr/Tanenbaum-2014-10-28
La conférence est destinée à un public large, ouverte à tous, et se tiendra en anglais.
2d Visibility
Comment gérer la visibilité dans une scène en 2D, en émettant des rayons depuis la source vers la géométrie des objets de la scène. Astucieux.
Voir aussi : http://ncase.me/sight-and-light et tout spécialement http://ncase.me/sight-and-light/draft4.html
Voir aussi : http://ncase.me/sight-and-light et tout spécialement http://ncase.me/sight-and-light/draft4.html
JustWriting - Votre blog 100% Markdown (et sans base de données) - Le Hollandais Volant
Non. Une base de données n'est pas une sorte de conteneur magique, c'est aussi un système de stockage basé sur des fichiers. Par contre, il est conçu spécifiquement pour gérer des données et fournit l'ensemble des mécanismes pour faire ça efficacement. Ce n'est pas pour rien que les théories à l'origine des bases de données sont vastes et complexes.
Concrètement, donc, il est tout à fait possible d'utiliser un sous-ensemble des optimisations d'une base de données sur un système de fichiers textes "maison". Par exemple, de manière générale, ce qui accélère beaucoup une base de données ce sont les index.
Une recherche rapide dans les articles peut donc se faire grâce à un index de mots-clés, grosso modo un gros tableau de la forme mot-clé -> [ID des articles contenant ce mot-clé]. Cet index est mis à jour à chaque ajout/édition/suppression d'articles. Si le nombre de mots-clés devient très grand et que l'on est limité en taille de fichier par PHP, les index hiérarchiques sont là pour ça. Dans ce type d'index, on va utiliser une chaîne de clé pour arriver jusqu'aux ID d'articles. Ainsi, les clés forment un arbre dont les feuilles sont les différents sous-ensembles de mot-clés/ID d'articles que l'on souhaite répartir dans des fichiers différents. Par exemple, cette chaîne peut être alphabétique : une première partition se ferait sur la première lettre des mots-clés, puis sur la seconde et ainsi de suite autant de fois que nécessaire. En augmentant ainsi le nombre de niveaux hiérarchiques, on peut gérer des index de TRES grande taille.
La liaison articles/commentaires est le plus simple, il suffit d'avoir un fichier de commentaires par article, et un index de mot-clé sur les commentaires pour pouvoir faire des recherches par mot-clé. Si l'on souhaite pouvoir faire des recherches par date, on prendra soin de créer un index approprié, dont les clés sont triées par date : un index trié est très rapide à parcourir en utilisant une recherche dichotomique.
A noter qu'un index inverse des commentaires vers les articles peut s'avérer très utile pour retrouver facilement un article à partir du commentaire.
Enfin, pour gérer l'ensemble des articles et d'éventuelles métadonnées, on utilisera aussi un index d'articles. Cet index peut être distribué : par exemple, Ginger utilise des fichiers liés, découpés en blocs de x articles, ce qui permet de pré-paginer l'affichage des liens avec des facteurs de x : 2x, 3x, 4x, etc.
Enfin, parler d'optimisation de stockage sans préciser qu'est ce que l'on cherche à optimiser n'a pas vraiment de sens. Une base de données sacrifie justement de l'espace de stockage pour la rapidité d'accès ou la rapidité d'écriture, notamment grâce aux index.
Globalement, les index sont des structures très simples, mais très puissantes. Par contre, ce sont des structures figées : si l'on veut pouvoir faire des recherches sur de nouveaux paramètres il faut construire de nouveaux index. Cela nécessite de réfléchir à ce que l'on fait lors de la conception de son logiciel, et non pas à l'arrache au fur et à mesure.
Concrètement, donc, il est tout à fait possible d'utiliser un sous-ensemble des optimisations d'une base de données sur un système de fichiers textes "maison". Par exemple, de manière générale, ce qui accélère beaucoup une base de données ce sont les index.
Une recherche rapide dans les articles peut donc se faire grâce à un index de mots-clés, grosso modo un gros tableau de la forme mot-clé -> [ID des articles contenant ce mot-clé]. Cet index est mis à jour à chaque ajout/édition/suppression d'articles. Si le nombre de mots-clés devient très grand et que l'on est limité en taille de fichier par PHP, les index hiérarchiques sont là pour ça. Dans ce type d'index, on va utiliser une chaîne de clé pour arriver jusqu'aux ID d'articles. Ainsi, les clés forment un arbre dont les feuilles sont les différents sous-ensembles de mot-clés/ID d'articles que l'on souhaite répartir dans des fichiers différents. Par exemple, cette chaîne peut être alphabétique : une première partition se ferait sur la première lettre des mots-clés, puis sur la seconde et ainsi de suite autant de fois que nécessaire. En augmentant ainsi le nombre de niveaux hiérarchiques, on peut gérer des index de TRES grande taille.
La liaison articles/commentaires est le plus simple, il suffit d'avoir un fichier de commentaires par article, et un index de mot-clé sur les commentaires pour pouvoir faire des recherches par mot-clé. Si l'on souhaite pouvoir faire des recherches par date, on prendra soin de créer un index approprié, dont les clés sont triées par date : un index trié est très rapide à parcourir en utilisant une recherche dichotomique.
A noter qu'un index inverse des commentaires vers les articles peut s'avérer très utile pour retrouver facilement un article à partir du commentaire.
Enfin, pour gérer l'ensemble des articles et d'éventuelles métadonnées, on utilisera aussi un index d'articles. Cet index peut être distribué : par exemple, Ginger utilise des fichiers liés, découpés en blocs de x articles, ce qui permet de pré-paginer l'affichage des liens avec des facteurs de x : 2x, 3x, 4x, etc.
Enfin, parler d'optimisation de stockage sans préciser qu'est ce que l'on cherche à optimiser n'a pas vraiment de sens. Une base de données sacrifie justement de l'espace de stockage pour la rapidité d'accès ou la rapidité d'écriture, notamment grâce aux index.
Globalement, les index sont des structures très simples, mais très puissantes. Par contre, ce sont des structures figées : si l'on veut pouvoir faire des recherches sur de nouveaux paramètres il faut construire de nouveaux index. Cela nécessite de réfléchir à ce que l'on fait lors de la conception de son logiciel, et non pas à l'arrache au fur et à mesure.
xkcd: Tasks
Cette planche est tellement vraie. Grossièrement traduit, ça donne :
- quand un utilisateur prend une photo, l'application doit vérifier s'il se trouve dans un parc national...
- ok, c'est juste une vérification à faire avec les coordonnées géographiques.
- ... et vérifier s'il s'agit d'une photo d'oiseau.
- j'aurais besoin d'une équipe de recherche et de cinq ans.
Légende : En informatique, il est parfois difficile d'expliquer la différence entre le facile et le pratiquement impossible.
Et le texte alternatif est très parlant lui aussi :
"In the 60s, Marvin Minsky assigned a couple of undergrads to spend the summer programming a computer to use a camera to identify objects in a scene. He figured they'd have the problem solved by the end of the summer. Half a century later, we're still working on it."
Pour info, Marvin Minsky est l'un des grands acteurs de l'intelligence artificielle.
- quand un utilisateur prend une photo, l'application doit vérifier s'il se trouve dans un parc national...
- ok, c'est juste une vérification à faire avec les coordonnées géographiques.
- ... et vérifier s'il s'agit d'une photo d'oiseau.
- j'aurais besoin d'une équipe de recherche et de cinq ans.
Légende : En informatique, il est parfois difficile d'expliquer la différence entre le facile et le pratiquement impossible.
Et le texte alternatif est très parlant lui aussi :
"In the 60s, Marvin Minsky assigned a couple of undergrads to spend the summer programming a computer to use a camera to identify objects in a scene. He figured they'd have the problem solved by the end of the summer. Half a century later, we're still working on it."
Pour info, Marvin Minsky est l'un des grands acteurs de l'intelligence artificielle.
Gephi pour la visualisation et l'analyse de graphes
Un logiciel de visualisation et d'analyse de graphes appelé Gephi. Apparemment, ça supporte plusieurs types de graphes (dirigés, hiérarchiques, topologie variable au cours du temps) ainsi que des graphes de grandes tailles.
Getting Started with Java® SE Embedded on the Raspberry Pi
Java SE Embedded est une version allégée de Java SE, conçue pour tourner avec des processeurs ARM v5/6/7, 32Mo de RAM et 10-50Mo de ROM/Flash/disque (dépend du profil utilisé, c'est-à-dire des sous-ensembles de l'API Java SE utilisés par l'application).
C'est plutôt léger, ça tourne uniquement sous UNIX/Linux et c'est vraiment du Java 8, contrairement à cette abomination de Java ME.
Idéal, donc, pour faire du Java sur un Raspberry PI.
C'est plutôt léger, ça tourne uniquement sous UNIX/Linux et c'est vraiment du Java 8, contrairement à cette abomination de Java ME.
Idéal, donc, pour faire du Java sur un Raspberry PI.
Choosing the right estimator
Le plus difficile dans un problème d'apprentissage artificiel, c'est de trouver l'algorithme le plus adapté aux données que l'on possède.
Ce diagramme permet de s'y retrouver un peu, tout particulièrement si l'on utilise scikit-learn.
Ce diagramme permet de s'y retrouver un peu, tout particulièrement si l'on utilise scikit-learn.
Negative data | The Upturned Microscope
S'il y a bien quelque chose que j'ai pu observer auprès des chercheurs, c'est cette crainte de l'échec d'une expérience ou du blocage dans une voie sans issue.
Certes, c'est une crainte légitime, en cela qu'il est très difficile de publier un papier sur quelque chose qui ne fonctionne pas. Et dans le monde de la science, qui ne publie pas n'existe pas.
Toutefois, c'est extrêmement dommageable, sachant que le travail d'introspection sur ces échecs permettrait d'éviter à d'autres de les répéter et donc d'explorer d'autres voies après avoir tiré des leçons du passé. Réfléchir sur les causes de l'échec d'une idée ou de l'absence de résultats sur un axe de recherche donné est un processus sain, qui fait partie intégrante de la démarche scientifique.
Globalement :
1. Un échec EST un résultat, et devrait être publié-traité comme tel.
2. L'absence de résultats EST un résultat, et devrait être publié-traité comme tel.
Le jour où les chercheurs, et à plus forte raison les éditeurs, intégreront ces règles, les scientifiques cesseront de perdre du temps à explorer plusieurs fois les mêmes voies sans issues.
Je rêve du jour où des journaux et des conférences seront dédiés aux résultats négatifs.
Certes, c'est une crainte légitime, en cela qu'il est très difficile de publier un papier sur quelque chose qui ne fonctionne pas. Et dans le monde de la science, qui ne publie pas n'existe pas.
Toutefois, c'est extrêmement dommageable, sachant que le travail d'introspection sur ces échecs permettrait d'éviter à d'autres de les répéter et donc d'explorer d'autres voies après avoir tiré des leçons du passé. Réfléchir sur les causes de l'échec d'une idée ou de l'absence de résultats sur un axe de recherche donné est un processus sain, qui fait partie intégrante de la démarche scientifique.
Globalement :
1. Un échec EST un résultat, et devrait être publié-traité comme tel.
2. L'absence de résultats EST un résultat, et devrait être publié-traité comme tel.
Le jour où les chercheurs, et à plus forte raison les éditeurs, intégreront ces règles, les scientifiques cesseront de perdre du temps à explorer plusieurs fois les mêmes voies sans issues.
Je rêve du jour où des journaux et des conférences seront dédiés aux résultats négatifs.
UMLet – Créez facilement vos diagrammes UML sous GNU/Linux – La vache libre
Je me souviens que, quand j'étais étudiant (ah le vieux !), c'était un cauchemar pour trouver un éditeur UML complet.
J'ai du en essayer des dizaines à l'époque, des grosses usines à gaz hors de prix (Rational Rose, Visual Paradigm, Borland Together, Jude, UML pour Visio, ...) jusqu'aux petit projets open source (Umbrello, Dia, ...) sans en trouver un seul qui (i) respecte le standard UML dans son intégralité (tous les types de diagrammes) et (ii) permette de personnaliser les formes.
Le seul vraiment potable, c'était StarUML, un petit éditeur mais très complet. Hélas, il n'était plus maintenu depuis 2005.
http://fr.wikipedia.org/wiki/StarUML
Cet UMLet a l'air très sympa cela dit, et très personnalisable.
J'ai du en essayer des dizaines à l'époque, des grosses usines à gaz hors de prix (Rational Rose, Visual Paradigm, Borland Together, Jude, UML pour Visio, ...) jusqu'aux petit projets open source (Umbrello, Dia, ...) sans en trouver un seul qui (i) respecte le standard UML dans son intégralité (tous les types de diagrammes) et (ii) permette de personnaliser les formes.
Le seul vraiment potable, c'était StarUML, un petit éditeur mais très complet. Hélas, il n'était plus maintenu depuis 2005.
http://fr.wikipedia.org/wiki/StarUML
Cet UMLet a l'air très sympa cela dit, et très personnalisable.
Graphismes 2D pour les programmeurs
Cette initiation à InkScape et aux graphismes vectoriels est excellente. Simple, claire et bien écrite, c'est idéal pour démarrer.
C'est traduit de "2D Game Art for programmers", un blog dédié au dessin vectoriel.
http://2dgameartforprogrammers.blogspot.fr
C'est traduit de "2D Game Art for programmers", un blog dédié au dessin vectoriel.
http://2dgameartforprogrammers.blogspot.fr
Qu'est-ce que le travail spéculatif ? - YouTube
C'est exactement pareil avec le développement logiciel, lorsque de grosses entreprises comme Microsoft ou la RATP lancent des concours et des hackathons en chaîne. Et le pire, c'est que ça marche.
Ce type de comportement est typiquement perdant-perdant :
- le commanditaire n'obtient que des produits/idées recyclés et bancals ;
- les gagnants sont généralement moins bien payé qu'avec un travail classique ;
- les perdants ont gaspillés du temps sans aucune contrepartie.
Vous voulez de la visibilité en tant que développeur ? Participez à des projets open-source, rejoignez des associations, démarrez un blog technique, lancez vos projets persos ou aidez vos amis à concrétiser leurs idées.
Mais par pitié, cessez de vous dévaloriser auprès d'entreprises malhonnêtes. Si vous ne le faîtes pas pour vous faîtes le au moins pour les autres.
Ce type de comportement est typiquement perdant-perdant :
- le commanditaire n'obtient que des produits/idées recyclés et bancals ;
- les gagnants sont généralement moins bien payé qu'avec un travail classique ;
- les perdants ont gaspillés du temps sans aucune contrepartie.
Vous voulez de la visibilité en tant que développeur ? Participez à des projets open-source, rejoignez des associations, démarrez un blog technique, lancez vos projets persos ou aidez vos amis à concrétiser leurs idées.
Mais par pitié, cessez de vous dévaloriser auprès d'entreprises malhonnêtes. Si vous ne le faîtes pas pour vous faîtes le au moins pour les autres.
Geohash
Geohash est une technique de hashage spécifique aux coordonnées géographiques (latitude, longitude). L'empreinte produite est plus ou moins longue en fonction de la précision géographique désirée : chaque partie de la chaîne désigne une zone de plus en plus précise, de façon à ce que, si l'on retire des caractères en fin de chaîne, la précision diminue.
Concrètement, Geohash est basé sur une découpe hiérarchique du globe. La zone X correspond à un bloc (une portion du globe) d'une surface donnée, la zone XY correspond à un bloc plus petit dans la zone X (Y est inclus dans X), la zone XYZ correspond à un bloc encore plus petit dans la zone Y (Z est inclus dans Y). Et ainsi de suite jusqu'à atteindre la précision voulue.
L'entrée de l'Inria, par exemple, est au centre de la zone u09mzf7x tandis que le château de Versailles est au centre de la zone u09t8kd3.
Concrètement, Geohash est basé sur une découpe hiérarchique du globe. La zone X correspond à un bloc (une portion du globe) d'une surface donnée, la zone XY correspond à un bloc plus petit dans la zone X (Y est inclus dans X), la zone XYZ correspond à un bloc encore plus petit dans la zone Y (Z est inclus dans Y). Et ainsi de suite jusqu'à atteindre la précision voulue.
L'entrée de l'Inria, par exemple, est au centre de la zone u09mzf7x tandis que le château de Versailles est au centre de la zone u09t8kd3.
Comprendre l'échantillonnage 4:4:4, 4:2:2 et 4:2:0 en vidéo
Un récapitulatif bien écrit sur la compression d'image par simple changement d'espace colorimétrique.
Animated Algorithms
Très classe cet outil de visualisation d'algorithmes. Par exemple :
http://www.algomation.com/algorithm/heap-sort-priority-queue
http://www.algomation.com/algorithm/prim-minimum-spanning-tree
Et on peut écrire ses propres algos, en javascript.
http://www.algomation.com/algorithm/heap-sort-priority-queue
http://www.algomation.com/algorithm/prim-minimum-spanning-tree
Et on peut écrire ses propres algos, en javascript.
Cars like computers?
Et tout comme les voitures, il faudrait un permis :)
Je vous traduis approximativement ma préférée (les termes automobiles en l'anglais n'ayant pas forcément d'équivalents logiques en français) :
Helpline: Service technique de General Motors, comment puis-je vous aider ?
Customer: Je suis entré dans ma voitures, j'ai fermé les portes et rien ne s'est produit !
Helpline: Avez-vous utilisé votre clé de contact pour enclencher le démarreur ?
Customer: C'est quoi un démarreur ?
Helpline: C'est un moteur électrique alimenté par votre batterie, qui démarre le moteur à combustion.
Customer: Contact ? Démarreur ? Moteur ? Batterie ? Pourquoi devrais-je connaître tous ces termes techniques juste pour utiliser ma voiture ?
Je vous traduis approximativement ma préférée (les termes automobiles en l'anglais n'ayant pas forcément d'équivalents logiques en français) :
Helpline: Service technique de General Motors, comment puis-je vous aider ?
Customer: Je suis entré dans ma voitures, j'ai fermé les portes et rien ne s'est produit !
Helpline: Avez-vous utilisé votre clé de contact pour enclencher le démarreur ?
Customer: C'est quoi un démarreur ?
Helpline: C'est un moteur électrique alimenté par votre batterie, qui démarre le moteur à combustion.
Customer: Contact ? Démarreur ? Moteur ? Batterie ? Pourquoi devrais-je connaître tous ces termes techniques juste pour utiliser ma voiture ?
Job Interview - Saturday Morning Breakfast Cereal
Tellement réaliste.
La version en français ici : http://cereales.lapin.org/index.php?number=3267
La version en français ici : http://cereales.lapin.org/index.php?number=3267
The Visual Microphone: Passive Recovery of Sound from Video
Une technique pour reconstruire le son d'une vidéo à partir des vibrations infimes des objets (feuilles des plantes, paquet de chips), qui n'est pas sans rappeler l'utilisation des lasers pour détecter les vibrations d'une vitre.
La solution pour extraire des sons dont la fréquence est supérieure à la fréquence d'enregistrement de la vidéo, est particulièrement intéressante.
J'aimerais cependant connaître les détails exacts de l'expérience, comme la position de l'émetteur du signal sonore par rapport à l'objet observé ainsi que la résolution des vidéos (et pas seulement leur fréquence). D'après ce qui est dit dans la vidéo "les feuilles bougent de moins d'une centaine de pixels", ce qui porterait à croire que la résolution nécessaire est significativement élevée.
EDIT : J'ai pu lire le papier (c'est pratique de travailler dans un centre de recherche) et il s'avère que la source est très proche de l'objet (http://benjaminbillet.fr/media/siggraph2014-fig4-experiment.png). La résolution nécessaire est assez faible mais l'objet doit être filmé de près.
Toutefois, les résultats restent très intéressant, notamment dans le cas où l'acquisition est réalisée avec une caméra classique (une Pentax K-01).
La solution pour extraire des sons dont la fréquence est supérieure à la fréquence d'enregistrement de la vidéo, est particulièrement intéressante.
J'aimerais cependant connaître les détails exacts de l'expérience, comme la position de l'émetteur du signal sonore par rapport à l'objet observé ainsi que la résolution des vidéos (et pas seulement leur fréquence). D'après ce qui est dit dans la vidéo "les feuilles bougent de moins d'une centaine de pixels", ce qui porterait à croire que la résolution nécessaire est significativement élevée.
EDIT : J'ai pu lire le papier (c'est pratique de travailler dans un centre de recherche) et il s'avère que la source est très proche de l'objet (http://benjaminbillet.fr/media/siggraph2014-fig4-experiment.png). La résolution nécessaire est assez faible mais l'objet doit être filmé de près.
Toutefois, les résultats restent très intéressant, notamment dans le cas où l'acquisition est réalisée avec une caméra classique (une Pentax K-01).
History of Lossless Data Compression Algorithms - GHN: IEEE Global History Network
Un historique complet des algorithmes de compression sans perte : DEFLATE, LZMA, bzip2, etc.
C'est assez concis, facile à comprendre (avec les références qui vont bien pour pouvoir aller creuser en détail telle ou telle technique) et ça balaye aussi bien les méthodes de compression (Huffman, RLE, codage arithmétique, etc.) que les différentes familles d'algorithmes qui en sont issues (algorithmes à fenêtre glissante, à dictionnaire, etc.).
C'est assez concis, facile à comprendre (avec les références qui vont bien pour pouvoir aller creuser en détail telle ou telle technique) et ça balaye aussi bien les méthodes de compression (Huffman, RLE, codage arithmétique, etc.) que les différentes familles d'algorithmes qui en sont issues (algorithmes à fenêtre glissante, à dictionnaire, etc.).
TOP GEAR's Driverless Truck - YouTube
Cet UGV est impressionnant. J'aime tout particulièrement la façon dont le système acquiert des informations sur son environnement, à la manière d'un Kinect, et reconstruit une vue simplifiée du terrain et des obstacles.
Hotel WiFi Speed Test
Excellente initiative qui recense la qualité du WiFi des hôtels dans le monde.
Why blurring sensitive information is a bad idea | dheera.net
Pixelliser certaines informations sensibles sur une photographie ou une capture d'écran peut être dangereux, surtout s'il s'agit de nombres. En effet, il est relativement facile pour un attaquant d'effectuer des comparaisons avec toutes les solutions possibles.
A curated list of awesome Machine Learning frameworks, libraries and software
Une liste de librairies d'apprentissage artificiel, de traitement du langage naturel et de data mining. Pour divers langages : C/C++, Java, Python, etc.
Squink Lets You Print A Circuit Board For The Price Of A Cup Of Coffee | TechCrunch
Une imprimante alimentée avec une encre conductrice, permettant d'imprimer directement des circuits. De plus, l'imprimante se charge aussi de coller directement les composants requis sur le circuit.
Une idée excellente quand on voit à quel point le processus de création de prototype chez soi, à partir d'une plaque d'essai ou de circuits pré-percés, peut être lourd.
Une idée excellente quand on voit à quel point le processus de création de prototype chez soi, à partir d'une plaque d'essai ou de circuits pré-percés, peut être lourd.
Technovelty - What actually happens when you plug in a USB device?
Que se passe t'il lorsque l'on branche un appareil sur un port USB ? La réponse vue du noyau Linux.
Tessel
Un microcontrôleur qui exécute du JavaScript, il fallait oser. Outre ce choix discutable, Tessel possède les caractéristiques suivantes :
- 180mhz ARM Cortex-M3 LPC1830
- 32mb SDRAM
- 32mb Flash
- TI CC3000 WiFi radio
- 20-pin GPIO bank for general prototyping
Il peut aussi embarquer des modules vendus séparément, comme des capteurs (accéléromètre, capteurs de température, de bruit, d'humidité et de luminosité), des interfaces de communication (bluetooth, 2G, etc.), un GPS, un lecteur RFID ou encore un appareil photo.
Il ne possède cependant pas de batterie embarquée, mais peut être alimenté avec une batterie USB.
- 180mhz ARM Cortex-M3 LPC1830
- 32mb SDRAM
- 32mb Flash
- TI CC3000 WiFi radio
- 20-pin GPIO bank for general prototyping
Il peut aussi embarquer des modules vendus séparément, comme des capteurs (accéléromètre, capteurs de température, de bruit, d'humidité et de luminosité), des interfaces de communication (bluetooth, 2G, etc.), un GPS, un lecteur RFID ou encore un appareil photo.
Il ne possède cependant pas de batterie embarquée, mais peut être alimenté avec une batterie USB.
docopt—language for description of command-line interfaces
Docopt est un langage de description d'interface en ligne de commande. Il permet d'exprimer les différents paramètres admis en entrée du programme et de générer le parser associé dans plusieurs langages (Ruby, Go, C#, Python, C, etc.).
Le langage est basé sur les conventions qui sont utilisées dans les messages d'aide des commandes linux ou dans les pages de man (voir les exemples pour plus d'informations).
Le langage est basé sur les conventions qui sont utilisées dans les messages d'aide des commandes linux ou dans les pages de man (voir les exemples pour plus d'informations).
Basics of Machine Learning
Des vidéos traitant des algorithmes et techniques d'apprentissage artificiel (machine learning) pour ajouter aussi ce lien, qui contient trentaine de vidéos sur le sujet :
"Naive Bayes, decision trees, zero-frequency, missing data, ID3 algorithm, information gain, overfitting, confidence intervals, nearest-neighbour method, Parzen windows, K-D trees, K-means, scree plot, gaussian mixtures, EM algorithm, dimensionality reduction, principal components, eigen-faces, agglomerative clustering, single-link vs. complete link, lance-williams algorithm"
Une autre liste ici : http://machinelearningmastery.com/a-tour-of-machine-learning-algorithms/
"Naive Bayes, decision trees, zero-frequency, missing data, ID3 algorithm, information gain, overfitting, confidence intervals, nearest-neighbour method, Parzen windows, K-D trees, K-means, scree plot, gaussian mixtures, EM algorithm, dimensionality reduction, principal components, eigen-faces, agglomerative clustering, single-link vs. complete link, lance-williams algorithm"
Une autre liste ici : http://machinelearningmastery.com/a-tour-of-machine-learning-algorithms/
Game Mechanic Explorer
Un ensemble d'exemples de mécanismes, algorithmes et effets courants utilisés dans les jeux vidéos, présentés de manière concrète sous la forme de petites démonstrations en javascript (avec le code fourni). Pour le moment, il y en a peu et on espère que ce sera étoffé au cours du temps, mais c'est assez intéressant.
Voir aussi cette page : http://www.lostgarden.com/2006/10/what-are-game-mechanics.html
Voir aussi cette page : http://www.lostgarden.com/2006/10/what-are-game-mechanics.html
ChucK => Strongly-timed, On-the-fly Music Programming Language
ChucK est un langage de programmation open-source et multiplateforme, pour la synthèse audio temps réel. Il se présente sous la forme d'une syntaxe spécifique, conçue pour exprimer simplement des opérations de synthèse audio (oscillateurs, effets, etc.) évoluant au cours du temps (logique temporelle) et les connecter les uns aux autres. De plus, le langage offre un modèle de programmation concurrente simple d'emploi.
Un petit exemple tiré de la documentation :
// on crée une signal sinusoïde que l'on connecte au "digital/analog converter"
SinOsc s => dac; // sine oscillator
while(true)
{
// on choisit une fréquence aléatoire entre 30 et 1000 Hz
Std.rand2f( 30, 1000 ) => s.freq;
// on avance de 100 millisecondes dans le temps
100::ms => now;
}
Un petit exemple tiré de la documentation :
// on crée une signal sinusoïde que l'on connecte au "digital/analog converter"
SinOsc s => dac; // sine oscillator
while(true)
{
// on choisit une fréquence aléatoire entre 30 et 1000 Hz
Std.rand2f( 30, 1000 ) => s.freq;
// on avance de 100 millisecondes dans le temps
100::ms => now;
}
Introduction to A*
L'algorithme A* (prononcer "a star") est sans doute l'algorithme de pathfinding le plus connu et le plus simple.
Celui-ci est expliqué en détail sur cette page, ainsi que l'algorithme de Djikstra et l'algorithme Greedy BFS qui sont combinés dans l'approche A*.
Celui-ci est expliqué en détail sur cette page, ainsi que l'algorithme de Djikstra et l'algorithme Greedy BFS qui sont combinés dans l'approche A*.
List of Free Learning Resources - vhf/free-programming-books - GitHub
Histoire de ne plus dormir pendant quelques mois, ce repository héberge une très longue liste de livres de programmation, en libre accès. On y trouve aussi des livres portant sur l'algorithmique, des méthodologie de développement, les bases de données, le data mining, les mathématiques, etc.
Les listes sont organisées par langue (plus de 20 langues) puis par langage ou domaine.
La liste anglaise est vraiment impressionnante :
https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md
Les listes sont organisées par langue (plus de 20 langues) puis par langage ou domaine.
La liste anglaise est vraiment impressionnante :
https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md
Page 2 / 4
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
ven. 04 sept. 2015 22:42:24 CEST
machine-learning graphisme