XD blog

blog page


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

2014-02-26 Installer Python pour faire des statistiques

L'environnement que je suggère est celui que j'utilise pour préparer mes cours. Il permet d'utiliser les outils que je propose et d'obtenir un espace de travail équivalent à celui que propose R. Plusieurs options sont possibles :

Je poursuivrai par l'installation de pyensae, et je terminerai par la configuration de l'éditeur SCite qui est, de mon point de vue, le plus simple éditeur qui soit mais il fait bien ce pour quoi il est fait.

2014/10/25

Si je devais choisir une distribution, ce serait Anaconda. C'est la plus à jour et la plus complète. Une fois installée, elle devient la distribution par défaut sous Linux. Cela évite les confusions entre les différentes versions de Python (Python 2.7 est installée par défaut). Sous Windows, elle est plus complète que WinPython. Elle inclut notamment le package paramiko dont je me sers pour ouvrir une connexion SSH avec un serveur Linux et utiliser PIG.

Préliminaire

Il existe deux numéros de versions important à retenir :

Une fois choisis ces deux numéros de versions pour l'installation de Python, si ces versions sont précisées pour un module, alors il faudra choisir exactement ces deux mêmes versions.

WinPython


more...

2014-02-24 Travailler avec IPython notebook

Si l'environnement que R proposait était il y a encore quelques temps le meilleur compromis pour quiconque voulait faire des statistiques ou du machine learning, de mon point de vue, IPython a changé la donne. On peut toujours travailler avec un éditeur texte classique, ou avec une ligne de commande similaire à celle de R ou encore utiliser les notebook. Un notebook, c'est un peu comme une page blanche ou on mélange à la fois du texte, du code, des graphiques, des équations et même du javascript. C'est très pratique lorsqu'on cherche sa partition. Entendez par là que vous avez un problème à résoudre mais pas encore la solution. Il faut donc expérimenter. Cette page blanche vous permet facilement de garder une trace de tous vos essais et de les annoter puis de rédiger le document final. Pour vous en convaincre, il suffit d'aller voir la gallerie suivante (également A gallery of interesting IPython Notebooks), et on peut faire des choses assez marrantes (XKCDify) voire même utiliser R depuis IPython (Using R Within the IPython Notebook).

Pour essayer, l'option la plus rapide et de télécharger la distribution WinPython qui contient tous les packages intéressants pour un statisticien (ou data scientist). Il ne vous faudra pas très longtemps pour lancer le notebook et de là, découvrir par vous-même comment cela fonctionne. Il n'y a pas trente six mille boutons et tout est plutôt intuitif.


more...

2014-02-23 Python and C# in the same program

I pretty much use Python for everything, I link many of my tools with Python, having the same place to run them. However, C# is very convenient if you want to automate some processes on Windows. Since I discovered pythonnet, I do not look anymore for a way to do things in Python, I do it in C#, I make an assembly and I link it to Python.


more...

2014-02-16 Les amoureux sur Facebook

Quand j'étais petit, on docteur m'avait montré la courbe de croissance où je me situais et prédisais que je ferai une certaine taille à l'âge adulte. Aujourd'hui, Facebook fait pareil avec les personnes célibataires car les personnes en couples n'utilisent plus Facebook à la même fréquence ni ne sont plus aussi négatifs dans leurs commentaires. C'est en tout cas ce que racontent les deux articles suivants, Quand vous tombez amoureux, voici ce que voit Facebook et When You Fall in Love, This Is What Facebook Sees. Si vous vous rendez compte un jour que vous recevez moins de publicité pour les sites de rencontres alors que vous n'avez pas changé votre status... demandez-vous si vous n'êtes pas en train de tomber amoureux.

2014-02-12 Travailler à plusieurs sur le même projet informatique

La principale difficulté lorsqu'on travaille à plusieurs sur le même programme survient lorsqu'on doit agréger les modifications de plusieurs personnes. On part d'un même programme, on le modifie chacun de son côté et on essaye quelques jours plus tard de réconcilier les deux versions. C'est souvent laborieux et ça peut introduire quelques erreurs.

Une solution peut déjà être d'avoir un emplacement qui détient toujours la bonne version. Par exemple, hubiC vous propose d'avoir un répertoire distant (donc pas chez soi) synchronisé avec un répertoire local de son ordinateur. Ce même répertoire peut être synchronisé avec un autre répertoire local sur un autre ordinateur. De cette façon, dès que quelqu'un modifie un fichier, les autres contributeurs récupèrent les modifications (à condition d'être connecté).

Même si c'est pratique, ce genre de solution ne permet pas de revenir en arrière ni même de visualiser les modifications de chacun. Pour cela, on peut utiliser un système de suivi de source tel que GitHub, ce que j'ai fait pour pyensae, qui permet de voir les différences. Ce service n'est pas totalement gratuit (voir GitHub Pricing, BitBucket Pricing). Avant d'essayer, il est préférable de lire cette page : Fork A Repo. Si vous n'aimez pas trop les lignes de commande, il est possible de coupler cela avec TortoiseGit.


more...

2014-02-08 Résoudre un sudoku avec Excel et VBA

Le programme que vous trouverez plus bas résoud les sudoku. Je ne suis pas sûr qu'il faille rappeler les régles de ce jeu mais comme elles sont simples :

un sudoku

Et le programme Excel que j'ai fait se présente sous la forme :

un sudoku


more...

2014-02-07 Nettoyer son code

Après quelques années passées à enseigner, j'ai plein de bouts de code qui traînent partout, écrits sur des versions de Python différentes. Il y a des print avec ou sans parenthèses, des codes indépendants, d'autres liés à d'autres bouts. Parfois, j'ai envie de les réutiliser bien qu'ils soient vieux, qu'ils ne compilent plus avec la dernière version de Python. Alors, on s'y attaque, on l'exécute, on bute sur une erreur qu'on corrige avant d'essayer à nouveau. Est-ce le début d'un cycle fastidieux ou d'un cycle sans fin ? Avec un peu d'obstination - voire beaucoup - et on y arrive. Mais bien souvent, on s'arrête là, avec ce petit exemple qui fonctionne. C'est l'essentiel pour un exemple. Pour un programme, c'est souvent un peu juste. Les exécutions à répétitions n'ont ébranlé que la moitié du code. L'autre est restée intacte. La dernière version de Python la comprend, de là à dire qu'elle puisse l'exécuter...

Il existe un module qui effectue quelques vérifications : pylint. Il vérifie la syntaxe, les variables non utilisées, les modules importées inutilement, ou encore si une exception est correctement orthographiée. La plupart du temps, on se rarement rend compte qu'on a écrit raise Exeption("....") sauf quand l'erreur survient. On pourra rétorquer que cela devrait être couvert par les tests unitaires mais couvrir 100% du code est un travail laborieux. Et si vous êtes parfois paresseux comme moi, vous utiliserez parfois WinPython qui vous signale chaque endroit que la bonne syntaxe réprouve. Y jeter un coup d'oeil de temps en temps permet de repérer quelques erreurs avant la première exécution.

2014-02-02 Détecter des visages avec opencv

Après avoir lu un blog sur la détection de visages, je me suis dit que c'est facile d'écrire un petit programme pour vérifier que cela marche. Et c'est vrai ou pas si loin. Voici la recette sur Windows.


more...

2014-02-01 Sphinx themes and presentation

A year ago, I was looking for tools to generate automated help for a Python module. However, I was looking a tool able to use the javadoc style because most of my old code uses it. Doxygen is nice but the unavoidable tool is now Sphinx (+ autodoc). I will not explain what I did because I did it quick (and wrong). The right way to do it is to use the following Sphinx extension: Breathe. Anyway, I do not remember all the issues I had when trying Sphinx but I found the documentation more usable. So I played a little with some theme I was able to find:

Another thing I did wrong is the way I made the design of this blog. I implemented many thing (keywords generation, month aggregation...). But today, I would try first to look at Pelican or even directly use Sphinx which already does many things about indexes. If you look on the internet about sphinx blog theme, you would find some examples like the following one: Tinkerer. You can even find theme to do presentation (instead of PowerPoint I suppose):


more...

2014-01-30 Equation différentielle stochastique sous Excel avec VBA

C'est un TD que je donnais à l'ENSAE il y a quelques années. Mais le VBA n'a pas trop changé depuis cette époque, tout du moins comparé à d'autres langages. L'équation différentielle stochastique de Black et Scholes apparaît souvent lorsqu'on parle de finance :

 \frac{dY_t}{Y_t} = r dt + \sigma dW_t

Avec :

On cherche à résoudre numériquement cette équation avec Excel. C'est un peu le début de l'implémentation d'un pricer sous Excel.


more...

2014-01-29 Convert an equation into a PNG image

I recently faced an issue while converting an equation into an image using the method I developped in this post. I do not know why but the following expression \frac{X_t}{Y_t} did not work. So I had to use miktex and more specifically htlatex through the following command line:

htlatex eq.tex html "" "" "--interaction=nonstopmode"

The last parameter avoids the programm to check the input stream if an error was detected. I wrapped this into a quick and dirty python program you can find below. It will also describe what eq.tex should contain.


more...

2014-01-28 Comment extraire les paramètres d'un url en javascript

Plutôt que de créer des interfaces graphiques, j'utilise de préférence une page HTML avec du javascript que j'exécute avec un navigateur. Ca prend moins de temps et on trouve facilement sur internet une solution à son problème, voire trop de solutions pour extraire les paramètres d'un url en javascript : http://....?par1=value1&par2=value2. Voici un code qui fonctionne :


more...

2014-01-27 Créer une page de raccourcis en HTML/javascript

Quand Google Reader a disparu, je me suis demandé s'il était compliqué d'implémenter rapidement une sorte de page HTML en local depuis laquelle je pourrais consulter les blogs. Même si j'ai finalement implémenté quelque chose d'un peu plus complexe (pymmails), il est resté quelques essais et bouts de codes. Le code suivant permet de diviser la page en deux, d'avoir d'un côté une liste d'urls, de l'autre, une fenêtre dans laquelle s'affiche le site cliqué. Je m'en sers parfois pour faire des listes de raccourcis sur des outils internes plus facile à transférer d'un ordinateur à un autre que les raccourcis d'un navigateur. Un exemple de ce que cela donne est plus bas.


more...
<-- -->

Xavier Dupré