XD blog

blog page

programmation


2014-10-24 Programmation Artistique

Je viens de passer la semaine à essayer de comprendre comment faire des choses simplement avec des outils compliqués. C'est comme si je m'étais cassé la tête à essayer de comprendre le manuel de mon réfrigérateur dont je ne sais toujours pas régler la température, le réglage de ma chaîne hifi ou le bouton camouflé qui ouvre mon aspirateur. Il est si discret que j'oublie à chaque fois que ce n'est pas un auto-collant. On perd un temps fou à essayer de comprendre cette forme de raisonnement intuitif qu'un autre a imaginé pour vous. Et comme cet intuitif m'échappe complètement ce soir, j'aimerais me dire que mon frigo fonctionne comme ce livre : Raisonnements divins et que le temps que je passe à essayer de le comprendre n'est pas passé en vain. Heureusement qu'il garde les bières au frais, sinon, je crois que je deviendrais fou.

2014-09-13 La programmation à l'école

J'écoutais l'émission Le téléphone sonne sur France Inter à propos du contenu des enseignements. Je faisais autre chose à côté donc je ne me souviens pas de tout et puis le ton du dialogue nous amène un peu partout sans vraiment construire une réflexion. Toutefois, au milieu de l'émisssion, Cédric Villani prend la parole pour dire que les enfants devraient pratiquer un sport, jouer d'un instrument de musique, apprendre un langage de programmation et puis l'anglais pour voyager.

Le plus étrange est qu'il a pris le temps de préciser que l'anglais était indispensable pour voyager sans justifier les autres ingrédients de la liste. En guise de réponse, je citerais une conférence de François Elie qu'un élève m'a fait découvrir.

Pourtant dans l'article Ces branchés qui débranchent (voir aussi La soeur du patron de Facebook conseille aux enfants de se déconnecter), on y apprend que les patrons des startups les plus célèbres désirent une éducation presque sans écran pour leurs enfants.

Peut-être faut-il en déduire que le numérique à l'école ne passe pas nécessairement par un écran.

2014-06-20 Python et Excel

On m'a posé récemment la question des divers moyens de travailler avec Python et Excel. J'en connais trois :


more...

2014-06-18 Apprendre à programmer tout seul à l'adolescence

J'ai commencé la programmation à l'âge de 10 ans, avec mon premier ordinateur qui était un Amstrad CPC 464 avec des cassettes (voir aussi L'Amstrad CPC 464 fête ses 30 ans). C'était en Basic. Aujourd'hui les langages ont changé, ils permettent de faire plus rapidement une quantité de chose mais il est très probable que j'apprendrais de la même manière : en suivant pas à pas les exemples des premières pages d'un livre : Apprendre à programmer avec Python. Peut-être y ajouterai-je aujourd'hui un ou deux MOOC : Langage Python, MOOC consacré à la programmation (langage utilisé : Python), Programmation en Python pour débutants - Les bases.

Python est un bon choix de premier langage : il est à la fois très simple et très utilisé. Avec un peu d'anglais, il est facile de trouver une réponse à un problème comme un obscur message d'erreur.


more...

2014-06-14 Sports Scientist et Big Data

Les équipes de football équipent leurs joueurs de capteurs, un sur chaque jambe. Ils enregistrent leurs déplacement, les trajectoires des ballons, et moulinent le tout grâce à des statisticiens spécialisés dans le domaine : Big data football club, Le football professionnel à l'heure du big data, Big Data: Would number geeks make better football managers?. Sports Scientist est le terme qui regroupe les métiers qui étudient le sport sous un angle scientifique. Le statisticien est devenu l'un d'entre deux.

2014/10/30

Un article plus récent paru sur le sujet : La Data Révolution (dans le football et l'Equipe).

2015/02/01

Un autre article plus récent paru sur le sujet : Crowdsourcing ou algorithme : comment évaluer le prix d’un joueur de foot ? (rue89).

2014-06-11 Torsion de problèmes

Il n'existe le plus souvent aucun algorithme qui réponde exactement à un problème, surtout si c'est le vôtre. Mais ça ne veut pas dire qu'il n'existe pas de solution. Avec un peu d'imagination, il faut arriver à tordre le problème initial pour exploiter des algorithmes connus. Cette torsion sera d'autant plus facile qu'on connaît d'algorithmes. Par exemple, voici trois problèmes :

Et voici trois classes d'algorithmes :

Sauriez-vous apparier un problème avec une classe d'algorithmes qui mèneraient à la solution ?

Un indice : Inférer les trajectoires des velib

2014-06-04 Commencez avec Python

Quelques pointeurs pour ceux qui veulent commencer avec Python.

Et pour les plus jeunes :

2014-06-03 pandas and openpyxl are not compatible anymore

I use a lot openpyxl with pandas. But the new version of openpyxl is not compatible anymore with pandas. So be careful to install an older version until this compatibility issue is fixed:

pip install openpyxl==1.8.6

2014-05-24 Graphs and Map / Reduce

Implementing graph algorithm on map/reduce is still a challenge. But maybe because it is a challenge, people keep thinking about it. It is the purpose of GraphX which reduces the processing time for the Page Rank algorithm on a Spark environment. It is not as fast as PowerGraph which is not based on Map/Reduce but it is must faster than Mahout (see paper GraphX: A Resilient Distributed Graph System on Spark). One fact, the language Scala appears more and more. A sign: Mahout recently took the decision to stop implementing machine learning algorithm against Map/Reduce to switch to Spark.

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-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-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...

2013-12-29 Big or small modules in Python, pyrsslocal

It is not always easy to determine a good size for a module or a set of modules. Should it be kept as a single bloc which comes alone or a set of smaller modules? It is easier to understand a smaller modules. It usually limits itself to a small set of similar functionalities. However, extending a small module is faster than starting a new one, it avoids spending too much time setting up the installation steps, documentation automation, dependencies with others modules. Small modules grow, especially if you work late on them on your free time.

pypi makes it simple to install a module and its dependencies, GitHub helps to fork some existing module which needs to be fixed for a specific usage. That's why I started to split my own toolbox. Does it worth the effort knowing I'm the only one to use it? Probably not but, for my teachings, I think I will not be reluctant anymore to create a new small project for a specific purpose.

I created or updated three modules:

2013-12-15 Quelques exercices de préparation à l'examen (5)

Lorsqu'on cherche un élément dans un tableau, c'est généralement pour retrouver sa position. Supposons maintenant que cet élément soit présent en plusieurs exemplaires et qu'on veuille toutes les positions où il est présent.

def positions(liste, element) :
    ...
    return une liste
    
l = [ 4,3,3,6,4,3 ]
print ( positions(l, 3) ) # affiche [1,2,5]

Dans un second temps, on veut transformer la liste l en un dictionnaire de sorte que la fonction positions ne contienne plus de boucle. Quelle est la solution la plus rapide ?


more...
<-- -->

Xavier Dupré