GBlog -Everything is possible

Articles récents

Aucun articles récent ;o(

Mercredi 3 Mai 2006

[Python] - Python 2.5 avant l'heure

Python 2.5 arrive, en attendant voici un petit script que j'utilise pour me donner quelqu'unes des fonctionalitées qu'il apporte.

from future import python2.5 :)

[ 7 commentaires ]

Mardi 24 Janvier 2006

[Rollers] - Vive Salomon

Vive Salomon

Que dire. Mes rollers avaient un petit défaut, une couture se déchirait. Je suis aller chez mon vendeur voir si la garantie pourrait faire quelque chose. Une semaine après je reçois un message du vendeur, Salomon m'échange ma paire gratuitement contre le même modèle de la nouvelle série pas encore commercialisée.

J'ai donc des rollers tout neufs, mieux que ceux d'avant tout cela grâce à un geste commercial que je salue. Salomon a finit de conquérir un client (le début l'était pas la qualité de leur matériel aussi bien en rollers qu'en skis) et y gagne aussi de la pub.

Acheter Salomon, c'est bon !

Plus cela tombe à pic, je suis en train de rater mes partiels...

Tient, au passage, j'ai fait une super affaire. C'est des rollers à 300 euros que j'ai eu avec 45 % de réduction en solde et qui sont maitenant upgradés.

Pilot Pro 9 ti 2, le top des rollers de balade rapide.

[ 29 commentaires ]

Mardi 17 Janvier 2006

[Python] - Deque

J'ai trouvé l'objet deque trés interessant, que l'on peut trouver dans le module collection, que j'ai décider de faire un programme stupide avec :

from sys import stdout
from time import sleep
from collections import deque

braile = u'\u2801 \u2803 \u2807 \u280f \u281f \u283f \u287f \u28ff'.split()

deque = deque(reversed(braile))

while True:
   stdout.write('\b' * 5 + deque[0].encode('utf8'))
   stdout.flush()
   deque.rotate()
   sleep(1)

[ 0 commentaire ]

Samedi 24 Décembre 2005

[Python] - Sudoku

Après que mat ai décidé de se mettre au Python, j'ai eu envie de vous faire part des événements Pytonesques de ma nuit.

J'ai programmé un solveur du jeu de Sudoku. Si l'exercice n'en est pas très difficile, il en reste cependant artistique. Je donne expres le code source en dehors de la page car je n'ai plus confiance dans les qualités de mon hightlighter de code pour ne rien pourrir. (TODO : Refaire ce blog de A à Z en passant par Python).

Ce travail m'a amené à une conclusion. Faire super attention quand on essaie d'utiliser des variables qui ne viennent pas du scope en cours.

Vous aller me demander ce que je raconte, on a toujours dit en progammation que les "globales" n'étaient pas une bonne chose. Cependant dans la philosophie Python c'est autre chose et l'on se sert en permanance des variables venant des scopes non locaux. (Je vous laisse utiliser l'import d'un module pour tester cela).

Alors que m'est-t-il arrivé, un truc stupide. J'ai essayé de faire quelque chose dans cette philosophie, cependant l'accès à une valeur venant d'un scope externe ne pose jamais de problème, Python remonte les espaces de noms pour trouver ce qui l'interesse.

Mais la modification ne se passe pas comme prévu. Or si vous tentez les deux il vous insulte gentiement. Dans le cas ou vous ne faites que la modification, Python se contente de modifier soit la valeur du scope local dans le cas d'une variable non mutable, soit celle du scope global pour une variable de type mutable.

J'ai été clair, non ?

def eggs():

   def spam(i):
       if i == 5:
           boolean = True
           booleanlist[0] = True

   boolean = False
   booleanlist = [False]
   for i in range(10):
       spam(i)
       print boolean,booleanlist[0]

eggs()

Ce qui est tout à fait normal. Dans le cas de boolean on change d'objet, donc on en reference un nouveau dans l'espace local. Dans le cas de booleanlist, il va tout d'abord chercher l'objet booleanlist qu'il ne trouve pas et ensuite modifie une de ces valeurs.

Pigé ? Pas grave. Amusez vous bien avec le sudoku.

[ 17 commentaires ]

Dimanche 6 Novembre 2005

[Autres] - i'm back

Pour faire plaisir à mat

[ 1 commentaire ]

Lundi 8 Août 2005

[Vie en vrai] - News from Vietnam

Pour ceux que cela interesse, ma vie en vrai au vietnam :

http://guillaume.apinc.org/nfv/

[ 3 commentaires ]

Lundi 25 Juillet 2005

[Autres] - Anciens jeux

Le premier ordinateur qui entra chez moi fut un macintosh à l'époque où mon frère entrait au CP. Cela date de 1990 (Mince, cela ne me rajeunit pas...).

À cette époque, les rares fois ou je jouais, car je n'y avais pas le droit :), c'était à deux jeux. Dedalus et Spin doctor.

Dedalus

Une histoire dans l'espace où les personnages étaient de vrais acteurs filmés sur un bitmap. Si la qualité graphique ferait tache aujourd'hui, les énigmes étaient géniales. Je n'ai jamais pu le finir à cause d'un CD rayé...

Spin doctor

Un jeu trés simple dans le contexte et que je coderais surement en Python un de ces 4 si je ne trouve pas quelqu'un qui l'aurait déjà fait avant.

Vous êtes une barre qui peut tourner autours de points et qui peut changer de point quand elle passe près d'un autre (ou rebondir et ainsi de suite).

Le but est d'aller du début à la fin. Or le problème c'est qu'il y a des mines, des murs, des bombes, des barres ennemies...

Si vous avez des nouvelles de ces jeux, surtout de Dedalus, et que vous savez où je pourrais les retrouver, dites le moi.

[ 4 commentaires ]

Jeudi 21 Juillet 2005

[Python] - Vers l'infinie et au delà

Aujourd'hui Python nous démontre que à l'égal de Buzz l'eclair, il peut se rendre au delà de l'infinie.

Petit rappels mathématiques

La fonction exponentielle de base e (noté exp) n'est en fait que le nombre e à la puissance x. Ce nombre e est environ égal à 2.71 mais il s'agit d'un nombre irrationnel, donc sa forme exacte n'est pas connue (du même style que pi ou racine de 2).

Mais comment e est-t-il définie alors ? Il s'agit de la limite en l'infinie d'une suite croissante définie par :

u_n = (1 + 1 / n) ^ n

Comme je suis dans mes bonnes heures, je vous le démontre, les non-matheux peuvent passer ce paragraphe.

(1 + 1/n) ^ n = exp(ln((1 + 1/n) ^ n)) = exp(nln(1+1/n))

Or quand n tant vers l'infinie, 1/n tant vers 0. On a donc ln(1+u) avec u qui tend vers 0. On peux donc remplacer ln(1+u) par son développement limité en 0 que l'on gardera à l'ordre 1. ln(1+u) = u + quelque chose de négligeable devant u.

Bref, on obtient donc exp(nu). Or u = 1/n donc on a exp(1) = e

Là où Python pèche

Après ce cours mathématique qui à sans doute fasciné tous le monde, voici ce qui se passe de comique avec python.

from future import divison # on évite les arrondie avec la division
import math

n = 166111400
print math.e - (1 + 1/n) ** n

On obtient une valeur négative. (n peut varié en fonction de votre version de Python, de GCC ou de l'OS...) Or on sais que math.e = limite (1 + 1/n) ** n quand n tant vers l'infinie. On a démontré que cette valeur était plus petite que (1 + 1/n) ** n avec n = 166111400. La suite étant strictement croissante, on à le droit d'en déduire que 166111400 > l'infinie.

Je vous laisse méditer cette joyeuseté et je prie le ciel de m'apporter le LaTeX dans l'html sous peu.

[ 9 commentaires ]