XD blog

blog page

2014-04


2014-04-27 Tests A/B à la FNAC

Je ne vais plus très souvent à la FNAC sur les Champs-Elysées. Ce n'est pas la mieux achalandée mais, quand on sort trop tard, c'est un des rares endroits où on peut acheter un livre très tard. A vrai dire, je n'achète pas souvent de livres là-bas, s'il fallait choisir une librairie qui ouvre la nuit, j'irais plutôt à la Hune ou l'Ecumes des Pages où je sais que je serai un peu plus surpris. Néanmoins, j'étais étonné de voir la place qu'a prise le livre dans cette FNAC qui n'en vendait pas lorsqu'elle a ouvert. Les DVD sont réduits à la portion congrue, les séries télévisées ont pris de l'importance. Le rayon cuisine est aussi grand qu'ailleurs. Et puis le livre qu'on croyait en sursis a rempli l'espace.

C'est bien le seul élément stable. Le reste évolue trop vite. Il n'a pas ce caractère intemporel de l'écrit. D'ailleurs le livre désigne à la fois le contenu et le support. Pour un film, il existe le DVD, le Blueray. Pour la musique, le CD, MP3, pono... Pour les livres, il existe des kindles, des tablettes mais curieusement ce n'est pas là dessus qu'ils sont exposés à la FNAC. Le livre est un des seuls supports qui n'impose pas son rythme contrairement à un film qui se termine toujours à l'heure dite.

J'ai été aussi surpris de trouver un rayon jouets pour enfants. Cela ressemble aux rayons d'électroménager que j'ai vu un jour à la Fnac des halles. Cette façon de faire ressemble un peu un internet. On dispose un petit rayon quelque part et on regarde si ça prend. Une sorte de test A/B : on n'est à peu près sûr que vous n'êtes pas venu pour ça et on veut savoir si vous allez repartir avec.

Le livre survit, c'est peut-être de bonne augure pour la FNAC qui survivra aussi face à Amazon entre autres. Lorsqu'on cherche un livre sur internet, on a vite fait de faire le tour des alternatives qui vous entraînent sur un chemin circulaire (voir par exemple Systèmes de recommandations) Le libraire saura vous en faire sortir.

2014-04-20 Les algorithmes sur les graphes ne sont pas aussi simples en Map/Reduce

Je ne suis plus d'où cette histoire est partie ni si elle est vraie mais on dit souvent que si on relie deux personnes quelconques dans le monde par une chaîne d'amis, cette chaîne ne sera pas plus longue que 7. Sans doute Facebook pourrait y trouver à redire. Ce qui m'intéresse ce soir est de savoir la longueur de la chaîne qui me relie au Président de la République.

Je serais bien incapable de vous donner la réponse mais je pourrais vous dire comment la trouver. Si un de vos amis connaît la réponse à cette question, si cette réponse est l, alors dans votre cas, la réponse sera l+1 et vos amis pourront dire que la réponse dans leur cas est l+2. Pour que toute personne dans Paris ait la réponse à cette question, il suffit qu'une vague parte du président et se propage à chacun d'entre nous.

L'algorithme est en lui-même assez simple à implémenter à condition que le graphe soit petit. Lorsqu'il est grand (plusieurs dizaines de millions de noeuds), cela prend du temps, beaucoup de temps même si cela ne peut plus se faire sur le même ordinateur. On pense alors au concept Map/Reduce qui permet d'effectuer des calculs distribués sur plusieurs machines. Mais dans ce cas-ci, ce n'est pas si évident. Et pour comprendre pourquoi, la lecture continue ici : Graphe et Map Reduce.

J'ajoute ici quelques commentaires qui me sont parvenus cette semaine.

Le nombre de connexions qui relient deux individus est un vieux problème : Small-world experiment, Le nombre d'Erdős. Les algorithmes sur des grands graphes ne sont jamais évidents, ne serait-ce que pour calculer (en un temps raisonnable) le plus court chemin entre deux pages Wikipedia comme sur Wikidistrict, décrite ici Wikidistrict, une exploration ludique de Wikipédia. Le premier réflexe lorsqu'on traite un grand nombre de données est de réduire la taille du problème ou de regardeer sur des examples. Cependant, s'il est facile de concevoir ce qu'est un échantillon au sein d'une population, qu'est-ce qu'un échantillon au sein d'un graphe, un échantillon qui respecte les propriétés du graphe. Vous trouverez quelques réponses ici : Statistical Analysis of Network Data (Eric D. Kolaczyk).

2014-04-19 Les médecins et les médicaments génériques

Une ordonnance à la main, je vais chez le pharmacien. Celui-ci m'explique qu'il a remplacé un médicament par son générique. Je regarde le nom. Il très ressemblant comme si Assurancetourix passait chez les Visigoths. Je lui demande pourquoi les médecins n'écrivent pas directement le nom du générique ou même de la molécule. La réponse est immédiate : ils utilisent les noms commerciaux à la faculté. Mais c'est par là qu'il fallait commencer : faire cours de médecine avec le nom des molécules ! Mon pharmacien n'avait pas l'air convaincu : difficile d'imposer à un vieux prof de changer car ce seraient de vieux médecins en fin de carrière qui enseignent.

La conversation continue et il m'apprend que beaucoup de pays n'utilisent pas les noms commerciaux. Dans une précédente pharmacie, des patients venaient avec les ordonnances d'un médecin brésilien qui utilisait directement le nom de la molécule, même pas le nom du générique. Un autre écrivait ses ordonnances avec un logiciel qui ajoutait automatiquement le nom du générique. Discrètement, le pharmacien ajoute que les clients contestaient moins.

Une dernière chose m'intrigue. Je doute qu'un médecin prescrive les mêmes médicaments pendant 40 ans. La recherche évolue. Un nouveau remède sera être désigné par son nom commercial ou par sa molécule, le générique n'existant pas encore. Le médecin français retient le nom commercial. C'est sans doute une vieille habitude apprise à l'école. Que fait le médecin brésilien ? C'est peut-être lui que j'irai voir la prochaine fois.

Bref, pour imposer les génériques, il faudrait commencer par imposer les noms de molécules à l'école de médecine. Et puis on pourrait aussi imaginer que les noms des nouveaux médicaments soient plus explicites : molécule + nom du laboratoire.

2014-04-16 Désactiver les logs de cvxopt

Des élèves m'ont posé cette question aujourd'hui : comment désactiver les logs que génère le module cvxopt. J'ai trouvé la réponse en cherchant cvxopt disable log sur un moteur de recherche cvxopt, algorithm parameters ou encore CVXOPT output suppression with MOSEK.

from cvxopt import solvers
solvers.options['show_progress'] = False

2014-04-15 Systèmes de recommandations

C'est un des thèmes de recherche en vogue en ce moment. Les systèmes de recommandations. Une méthode courante est la factorisation de matrice. Une autre sont les Random Walks with Restart. A noter dans un coin pour de futurs sujets de projets informatiques.

2014-04-14 A reference for Text Processing with Map Reduce

While reading some papers, I found this reference: Data-Intensive Text Processing with MapReduce. It is a good introduction for people who never used Map Reduce.

2014-04-13 Latex formulas with Sphinx

Is it worth writing about something which took me 15 minutes to find out and others 15 to try? And it will be another 10 to write it down... I wonder! Anyway, I was looking for a way to add formulas in my python documentation.


more...

2014-04-12 Quelques astuces pour accélérer un programme

Python n'est pas un langage rapide mais cela n'empêche pas que certaines façons d'écrire du code son plus lentes que d'autres. On peut accélérer un code de différentes manières. En voici quelques-unes. L'article se conclut par l'utilisation d'un profiler.

Optimisation du code

L'exemple suivant trie des éléments. Mais comme ceux-ci sont soit des chiffres sous formes de lettres, soit des entiers, il faut d'abord tous les convertir en entiers.

rangs = ['6', 7, '5', 9, 8, '3']
rangs = sorted([int(r) for r in rangs])

Il est plus simple de définir que ces nombres seront des entiers une bonne fois pour toutes et ne jamais faire de conversions. Il faut toujours avoir des listes d'objets de même type. Dans le cas contraire, c'est l'assurance de faire des erreurs. Dans le même genre d'idées, il faut éviter les fonctions qui retournent des résultats de types différents.


more...

2014-04-10 La programmation pour les enfants

Comment initier les enfants à la programmation ? Je commence à croire que les langages de programmation ne s'appellent pas langages par hasard et que leur apprentissage doit démarrer tôt si on veut avoir une chance d'être bilingue ou trilingue français/anglais/python. Même si passer d'un langage à l'autre est plus facile que d'une langue à l'autre, on aurait tort de penser qu'il n'existe pas de figure de style. Le site codecrap recense les plus beaux contresens programmatiques et permet même de voter pour les plus esthétiques.

Je reviens au sujet principal qui est l'initiation des enfants à la programmation. Il est plus facile de faire rêver un enfant devant un train électrique. Je n'en disconviens pas mais cela n'empêche pas d'essayer de rendre cette abstraction accessible de plein de façons possibles.

Si vous savez programmer, vous pouvez considérer l'ordinateur comme votre esclave personnel. Il ne comprend que les ordres simples (très simples) ce qui en fait un esclave parfois récalcitrant (allez lire Trolls dans la brume pour comprendre ce qu'est un esclave récalcitrant). Mais... si vous ne savez pas programmer, il n'est pas trop tard pour apprendre. Vous avez tout d'abord la programmation ludique : le décor est un jeu et programmer est la seule façon de s'en sortir: erase all kittens, robozzle.

Vous avez aussi des jeux toujours au décor imposé dans lequel la programmation vous sert à définir le jeu. codecombat, rubywarrior.

D'autres se sont dit qu'il fallait apprendre à programmer avec un outil qui peut presque tout faire mais de manière graphique, donc quasiment sans clavier. Dans ce domaine, le plus abouti est Scratch (voir aussi snap). Il y a aussi blocky. Les deux se ressemblent beaucoup, la différence vient sans doute des extensions. Par exemple, avec Scratch et Enchanting, vous pouvez piloter le robot Lego Mindstorm.

Moins ludique, moins graphique mais forcément plus compliqué, on a des langages très simples permettant de dessiner : livecodelab, code-monster, kojo.

Certains ont aussi pensé qu'en français, ce serait plus facile : linotte. D'autres ont ajouté kids devant un langage connu : kidsruby, python for kids.

Et si vous avez aimé, vous pouvez passer au niveau supérieur avec des applications qui permettent de faire des jeux gamesalad, de concevoir des objets 3D openscad ou d'avoir une vision un peu plus mathématique de la chose : Loria PLM.

Et pour finir, allez voir Hello Processing ou comment programmer une oeuvre d'art. Ne me dites que ce prof ne vous fait pas envie. Si vous avez toujours perçu l'informatique comme quelque chose d'austère, allez lui rendre visite. Il s'éclate complet ! La science est l'aventure de demain : Théorème vivant.

2014-05-13

Faut-il introduire la programmation à l'école ? Quand ? Ce blog regroupe de nombreux articles et réflexion autour du sujet : Coder à l’école… vous n’arrivez pas à suivre les débats ?. L'un d'eux précise que la notion de variable n'est vraiment assimilable qu'à partir de dix ans et qu'elle est essentielle. Le fait de désigner un objet inconnu par une lettre et de le manipuler sans savoir ce qu'il est intervient en mathématiques en sixième-cinquième avec la résolution des équations.

2014-12-27

Un article paru en décembre 2014 sur différents outils La programmation pour les non-programmeurs.

2014-04-05 Quelques précisions sur les projets informatiques (finance)

Lorsqu'on récupère les données depuis le site Yahoo Finance !, la dernière colonne est intitulé Adj Close.

cours de la BNP

La série Close fait apparaître un saut le 20 février 2002. A cette date, la BNP a divisé le cours de ses actions par deux et multiplié le nombre de titre par deux. La colonne Adj Close corrige ces effets. Vous en saurez un peu plus en lisant cette page About historical prices.

J'ai également mis à jour le module pyensae et cette page d'exemples. Il faut donc le réinstaller à nouveau pour bénéficier des améliorations. Il est maintenant possible de tracer plusieurs courbes à la fois sur le même graphique, de récupérer un sous-ensemble de la série. Enfin, je remets ici le lien vers le document Petit exposé sur les algorithmes de trading.

2014-04-04 A small video on sorting algorithm

If you can recongize them all, you are good. 15 sorting algorithms in 6 minutes

D'autres lectures sur le coût des opérations en Python :

2014-04-02 References for Statistics with R

Python does not offer all the functionalities in one module, you need to look for them sometimes. In my case, I was looking for a statistical test on coefficients obtained with a linear regression. The module I was looking for is statmodels. While looking for that, I found this interesting blog Glowing Python. But I finally decided to switch to R where I know for sure I would find what I need. And because I'm not fluent in R, I need something like that : StatMethods.


Xavier Dupré