XD blog

blog page

2014-03


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.

2014-03-08 Programmer un robot Lego

J'ai acheté un robot Lego Mindstorms. Je me suis que si des enfants arrivent à le faire dans des coding goûters, je devrais bien y arriver aussi. Je suis donc allé dans un magasin Lego à Levallois pour dénicher l'objet (ici).

Je l'ai laissé mariner quelque temps afin de penser à aller acheter des piles (6 piles R6, 2 piles R03). Et j'ai commencé à monter l'engin, une occupation qui m'amuse beaucoup d'habitude, mais étant donné que j'étais plus intéressé par le robot fini que le fait de le construire, l'heure d'assemblage m'a paru longue. Lorsque j'ai eu fini, il me restait la moitié des pièces. J'ai compris que j'aurais dû télécharger l'application d'abord ! Cela prend une heure et on a le choix entre pas mal de modèles différents (avec les mêmes pièces je suppose). Si vous suivez le même chemin, il vaut mieux procéder dans cet ordre, télécharger d'abord, monter ensuite. Je vous montre une photo de mon petit n'importe quoi car je n'ai pas eu le courage de terminer un des assemblages proposés. L'essentiel était pour moi d'avoir un n'importe quoi qui bouge tout seul.


more...

2014-03-03 Styles conditionnels en VBA sous Excel

J'avais besoin de créer un tableau avec une ligne de couleur différente pour chaque jour de la semaine. J'ai d'abord essayé de me passer de programmation en VBA car je me suis dit que c'est le genre de choses que je pourrais trouver sans un menu quelconque. J'ai commencé à chercher dans les styles personnalisés, puis sur Internet mais j'ai finalement abandonné. Je suis passé au VBA et ça m'a pris une dizaine de minutes. J'ai utilisé la première ligne pour les couleurs que je souhaitais (j'ai fait ça très vite, ce n'est pas du meilleur goût) puis j'ai composé le tableau, une première colonne pour les dates, une seconde qui contient le jour de la semaine (obtenu par formule). C'est ce numéro qui indiquera la couleur.

Puis j'ai écrit la macro suivante :


more...

Xavier Dupré