XD blog

blog page


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.

2014-03-30 Le secret du vote en dehors de l'isoloir

Je votais ce matin pour les élections municipales. Je piochai deux bulletins, un pour chaque candidat, puis me dirigeai dans l'isoloir. Je me retrouvai face à deux feuilles de papier, anormalement grandes. J'en choisis une qu'il me fallut plier en huit afin de la faire rentrer dans l'enveloppe qui elle n'avait pas changé. Rien d'inhabituel dans ce geste citoyen excepté l'épaisseur du papier de chacun des bulletins : un papier épais d'un côté, un papier fin et glassé de l'autre. Une fois plié et fourré dans l'enveloppe, le bulletin épais ne pouvait plus cacher sa rondeur alors que le le bulletin fin et glassé gardait sa platitude. Je sus donc, sans trop hésiter, pour qui votèrent les deux personnes qui me précédèrent. Et je suppose fortement que le secret de mon bulletin n'aura pas résisté aux électeurs qui me suivirent.

2014-03-28 Quelques astuces pour faire du machine learning

On a parfois l'impression qu'il suffit de choisir un modèle (réseau de neurones, SVM, random forests, ou autres scikit-learn), de l'entraîner puis de l'appliquer pour obtenir un prédicteur de bonne qualité. Mais ça ne marche pas toujours... Voici quelques raisons qui pourraient l'expliquer.


more...

2014-03-22 Faire des gammes en programmation

Publier des articles sur son blog, mettre en ligne des corrections d'examens, synchroniser un répertoire de son disque avec un un disque USB, j'ai une forte tendance à automatiser toutes les tâches que je répète fréquemment afin qu'elles ne m'encombrent plus. J'avoue pourtant que ce n'est pas ce genre d'applications qui m'a fait apprécier l'exercice. Il arrive qu'automatiser ces corvées se mue en une corvée encore plus fastidieuse. J'ai d'abord aimé résoudre des petits problèmes tels que ceux énoncé sur Pydéfis puis d'autres plus compliqués comme L'énigme d'Einstein. Le site Google Jam est une bonne source de problèmes pour s'entraîner. On admet généralement qu'on ne peut pas devenir excellent musicien sans faire beaucoup de gammes. Je pense qu'on ne peut pas devenir excellent programmeur sans pratiquer ces exercices de temps à autre.


more...

2014-03-18 Python 3.4, no need to install pip anymore

The new version Python 3.4 was just released. One interesting change is that modules pip and setuptools are now part of the distribution. That's a relief. Every module which does not requires C++ compilation can now be installed using pip install [module] without any extra step. On Windows, the others modules can still be installed from this page: Unofficial Windows Binaries for Python Extension Packages unless you want to use Visual Studio to compile them. In this case, I recommend reading this page: Module Madness: installing Python modules on Windows.

Among the unexpected changes, the instruction #coding:latin-1 is not allowed anymore. The C++ API changed a little bit. It made me make a change to pythonnet to compile it with Python 3.4: pythonnet migration to Python 3.4. Hopefully, the installation of executables (sometimes after looking for them) could become easier with Python Wheels. Maybe WinPython will follow soon.

However, I recommend to wait a little bit before switching. I had some weird behaviour with matplotlib: no failure with Python 3.3 but a failure while drawing a second graph with Python 3.4.

2014-03-16 Laisser l'utilisateur définir ses propres paramètres

Chaque année, à la fin de l'année scolaire, je dois exécuter les projets de mes étudiants. Assez souvent, je me retrouve à répondre à des questions simples et parfois nombreuses : nom du premier joueur, nom du second joueur, niveau de jeu... Bien souvent, la première exécution ne fonctionne pas, la plupart du temps à cause d'un nom absolu de fichier qui ne trouve pas à l'endroit attendu. Une fois corrigé, je relance le programme et je dois de nouveau répondre à tous les questions.

Je pourrais leur imposer une façon de faire, mais lorsqu'un projet s'étire sur plusieurs mois, n'importe quel directive insérée dans un mail finit aux oubliettes. Je pourrais leur demander de modifier leur programme mais lorsque je suis face au problème à une heure très matinale, quelques heures avant leur soutenance, j'ai quelques doutes sur la réussite de l'entrerprise. Reste peut-être la possibilité de coder une fonction qui peut peut-être devenir aussi utile pour eux que pour moi.


more...

2014-03-15 Data pipeline in Python

I started to use Hadoop in 2008 at Yahoo. At that time, I liked it because the language introduced new constraints (there is no index, you can dispatch a huge amount of data among many machines but you have a limited amount of memory to process it on each machine) and it was fun playing with them. However, after a while, I accumulated many jobs, and I had to remember which one to run and in which order to get the final results. It is fine when you do research but not very convenient when you need to explain the full workflow to somebody else and even less convenient when you need to productionize the workflow.


more...

2014-03-12 Convert a PDF into an image

Today, I just wanted to convert a PDF into a PNG image. I knew I already did it but I forgot to remember how (I only need it once every six months). I hope you don't mind if I use my own blog to avoid looking again for it. First, it requires ImageMagick. The following script will do the trick:

from PythonMagick import Image

os.environ["MAGICK_HOME"] = r"path_to_ImageMagick"

file = "my.pdf"
to = file.replace(".pdf",".png")

p = PythonMagick.Image()    
p.density('300')
p.read(os.path.abspath(file))
p.write(os.path.abspath(to))

# the ImageMacgick command line to do it
# cmd = "convert -density 300 -depth 8 -quality 85 {0} {1}".format(file, to)

more...

2014-03-11 Echec informatique d'une réforme

Dans le train pour Londres, je suis tombé sur cet article : L’Etat abandonne le projet de superlogiciel de paie des fonctionnaires. A sa lecture, je fus surpris par les estimations initiales, les sommes dépensées dans un projet dont je n'imaginais pas qu'il pût être complexe à ce point. Je regrette que l'article ne dise pas pourquoi le projet a échoué. Peut-être la raison n'est connue que par la simple constatation que la fin est aussi loin qu'au commencement. La mise en place d'un logiciel censé simplifier la vie passe d'abord par la compréhension exhaustive du système existant. Il peut arriver que cette connaissance soit tellement diffuse qu'elle en devient difficile à saisir. Elle peut être répartie sur un grand nombre de personnes qui ont sans doute parfois adapté des règles vieillissantes à leur quotidien, quitte à transformer une règle écrite en un usage transmis oralement.

Mais tout de même, imaginer qu'on n'ait pu en venir à bout, qu'on n'ait pu établir une liste exhaustive des modes de paiements des fonctionnaires... Plus de 500 personnes ont travaillé sur ce projet, plus de 12.000 fonctionnaires assurant la paie des fonctionnaires. Si j'en crois cet article 5.493.200, c'est le nombre exact de fonctionnaires en France, chacun s'occupe des paies de 458 fonctionnaires. C'est à se demander si ce manque de clarté ne serait pas un effet désiré plutôt qu'une conséquence indésirable d'une gestion répartie dans chaque ministère depuis quelques décennies.

Je vais relire le Château de Kafka. J'y verrai plus clair.


<-- -->

Xavier Dupré