/dev/blah

things i want to remember, things i want to share

Entries tagged “python”

python -moo

written by tshirtman, on 2/13/11 11:42 PM.

Je suis tombé la dessus l’autre jour, en me baladant sur pypi

sudo pip install oo
python -moo
Voilà, il fallait que ça se sache :P

pygame_loaders

written by tshirtman, on 2/7/11 12:34 AM.

Juste pour signaler que j’ai coupé mes fonctions/classes de chargement/transformations d’image et de sons, de mon projet principal ultimate-smash-friends, pour les mettre dans un package python, pygame_loaders, que j’ai poussé sur pypi, et sur github…

vous pouvez donc soit les installer via pip:

pip install pygame_loaders
soit les cloner depuis github:
git clone git://github.com/tshirtman/loaders.py.git
la doc est chez l’un est l’autre, et dans le README ;) mais plus à venir sur son utilisation dans quelque temps :)

Ultimate smash friends, maj…

written by tshirtman, on 3/15/10 11:54 AM.

Voilà, pour dire que ça avance, on a une IA un peu bête, mais une IA quand même, on peut s’amuser un peu, alors j’ai fais un petit screencast, histoire de ^^. Il manque le son, faut que je refasse des essais avec gtk-recordmydesktop, il était tard cette nuit ^^.

vidéo trouvable aussi ici

Si le projet vous intéresse, plus d’infos ici

Mise en place d'un environnement de dev web python propre...

written by tshirtman, on 2/10/10 1:47 AM.

Explications préliminaire

Lorsqu’on débute dans le développement web en python, la mise en place d’un environnement de développement propre, au vu des différents outils disponibles, peut être un vrai labyrinthe. Je présenterai donc ici trois outils modernes et efficaces permettant de gérer le déploiement de la plupart des frameworks web python: virtualenv, pip et distribute

virtualenv permet de configurer un environnement python séparé de celui du système, l’interpréteur python et toutes les bibliothèques qui nous sont nécessaires seront installé dans cet environnement virtuel et ne perturberont pas le système… cela permet d’avoir un environnement identique sur différents serveurs avec des distributions différentes avec relativement peu de soucis.

pip permet d’installer des paquets python depuis pypi (connu aussi sous le nom de “cheese shop”) et de les installer, soit dans le système, soit dans le virtualenv choisit. Contrairement à easy_install (plus connus car plus ancien) pip est capable de nettoyer derrière lui, si on lui demande de désinstaller un paquet il le fait… il ne gère cependant pas les dépendance lors de la suppression.

distribute, qui sera utilisé par pip pour télécharger et installer les paquets depuis pypi, est une version activement maintenue de setuptools, qui permet d’utiliser et de créer des modules python (appelés eggs).

Passons à la pratique, comment ça marche, concrètement?
La première chose que nous voulons, est une version récente de pip, on peut pour cela utiliser… easy_install.
sudo easy_install pip
C’est la dernière fois que nous toucherons easy_install, une fois fait ceci, on utilise pip pour installer virtualenv et distribute
sudo pip install virtualenv distribute
Il faut maintenant créer notre virtualenv, il faut ici préciser que nous voulons utiliser distribute (sinon il utilise setuptools qui est assez buggé).
export VIRTUALENV_USE_DISTRIBUTE=true
virtualenv my_virtual_python_env
Vous pouvez bien sur donner tout nom qui vous convient à votre virtualenv ;).
Pour travailler avec un virtualenv, il faut l’activer, cela consiste à charger un certain nombre de variables d’environnement, un script fait ça pour nous, il se situe dans my_virtual_env/bin/ et s’appele activate, pour charger les variables d’un script, on utilise “source”:
source my_virtual_env/bin/activate
qui peut s’abrévier
. my_virtual_env/bin/activate
Ouf! Si tout s’est bien passé, on a un virtualenv opérationnel et chargé! (Pour “sortir” d’un virtualenv, utiliser la commande “deactivate”).

Pour aller plus loin:
Mettons que je veuille commencer un projet pylons ou repoze.bfg, ou bluebream, je peux installer ces frameworks via pip.
pip install pylons repoze.bfg bluebream
Ces frameworks utilisent paster pour permettre la création d’un projet aisément, le fait de les installer (via pip) fournis des templates à paster… s’il n’a pas été installé automatiquement (par pip et dans le virtualenv, pas dans le systeme) installez le via
pip install pastedeploy paste pastescript
(s’il a été installé dans le système auparavant, utilisez le très pratique pip uninstall pour faire le ménage).

On peut voir la liste des templates disponibles avec:
paster --list-templates
exemple:
Available templates:
  basic_package:      A basic setuptools-enabled package
  bfg_alchemy:        repoze.bfg SQLAlchemy project using traversal
  bfg_routesalchemy:  repoze.bfg SQLAlchemy project using Routes (no traversal)
  bfg_starter:        repoze.bfg starter project
  bfg_zodb:           repoze.bfg ZODB starter project
  bluebream:          A BlueBream project
  paste_deploy:       A web application deployed through paste.deploy
  pylons:             Pylons application template
  pylons_minimal:     Pylons minimal application template
Créer un projet repoze.bfg? rien de plus simple:
paster create -t bfg_ nom_du_projet
La base est là! Aller dans le dossier du projet, lancer:
python setup.py install
Pour déployer l’application (toujours dans votre virtualenv, et donc sans polluer votre système).

…et (enfin) pour lancer votre application:
paster serve fichier.ini

voila, votre appli par défaut tourne sur 127.0.0.1:6543, le port étant bien sur réglable dans le fichier .ini.
elle est complètement isolée du système et donc aisément reproductible.

Conclusion

Cette mise en place peut paraître un peu laborieuse, mais a l’avantage d’une quasi totale indépendance au système cible, tout en restant simple à mettre à jours (pip install –upgrade), distribuable (création d’eggs avec distribute), et sûrement d’autres dont je n’ai même pas connaissance :P. J’espère que vous avez apprécié, n’hésitez pas à faire des remarques :).

Nouvelle migration

written by tshirtman, on 12/12/09 3:03 AM.

Pour un bon moment celle ci j’espère.

Après l’achat (sur un coup de tête) de tshirtman.fr, je me suis dit que j’allais faire blog.tshirtman.fr et sérieusement ce coup ci… on (mon chef au boulot, plus connus sous le pseudo ccomb) m’avait conseillé zine qui à l’avantage d’être en python et de bonne facture, j’ai un peu galéré avant de trouver la bonne méthode d’installation (un buildout sur pypi bien sur >_<) mais en tout cas c’est propre et sympa…

Comme j’utilise apache pour les virtualhost, zine tourne en user normal via paster, sur un port quelconque, et apache lui renvoit les requetes via mod_proxy, c’est simple et efficace.

Je viens de finir d’importer les billets du pybloxom, j’aurais bien aimé retrouver les billets de mon vieux vieux blog, mais il semble que google n’ai pas daigné en garder du cache, que archive.org n’ai pas en la présence d’esprit de remarquer la contribution importante qu’ils représentaient… que je n’ai pas d’accès immédiat à mon serveur de l’époque (présentément eteinds), et que donc, je soit incapable, et sans doute pour un certain moment, de les récupérer.

Life’s life ^^.

sinon en ce moment je lis “the pragmatic programmer” qui contient une foule nombreuse de sages conseils sur le développement, reste à avoir l’intélligence de les mettre en application…

migration_pyblosxom

written by tshirtman, on 10/27/09 1:48 AM.

N’ayant pas le temps de développer mon moteur de blog, j’ai décidé de switcher vers pyblosxom, qui est simple mais assez complet… très “à la carte”, il me reste pas mal de config à faire mais ça semble fonctionnel, bientot les rss et les commentaires… normalement.

ultimate-smash-friends

written by tshirtman, on 9/21/09 11:46 AM.

Puisque j’ai un peu de temps, comme je suis en TP unix et que j’ai un peu fini depuis un moment, je vais prendre le temps de présenter ici succintement le projet qui occupe une partie de mon temps libre depuis mars 2008, c’est à dire depuis plus d’un an… Ce projet se nomme “ultimate-smash-friends” et se veut dans l’esprit des “super smash-bros” de Nintendo, c’est un projet libre, tout le monde peut participer à sa concrétisation, et à ses diverses évolutions, j’ai reçus de l’aide de plusieurs personnes, notamment au niveau des contenus, graphismes et sons, un peu au niveau du code aussi, ce dont je suis très heureux. Mais sans plus attendre, une brève présentation du jeu et de son état actuel:

Principe:

Pour ceux qui ne connaissent pas les smash bros, le concept est simple et jouissif, plusieurs combattants dans une arène en deux dimensions (vue de profil) s’affrontent afin d’être le dernier survivant, on meurt quand on tombe de l’arene, ou qu’on sort de l’écran par un coté.. pour aider les autres à tomber, on peut bien sur leur taper dessus, à l’aide de divers coups, combos et items, plus on prends de coups, plus notre “jauge” augmente, et plus notre jauge est haute, plus on est projeté loin lors d’un coup, certains coups plus puissants, les smashs servent spécifiquement à projeter l’adversaire loin dans une direction. les palettes de mouvements des personnages permettent souvent, lorsqu’elles sont bien maitrisé, de parcourir de grande distance dans les airs, pour se raccrocher in extremis au niveau et donc, ne pas tomber, tout le gameplay du jeu tourne donc autour des difféntes attaques et des différents sauts, permettant de faire tomber, en évitant de tomber soit même.

L’état actuel:

Ma version demande encore à être polie, et de nombreux bugs restent à résoudre, cependant, il est tout à fait possible de s’amuser avec, les personnages peuvent sauter, donner des coups, effectuer des combos impliquants des projections d’items, éventuellement explosifs, et d’un certain nombre d’actions évoluées. Quelques personnages sont disponibles avec plus ou moins de travail à apporter pour les rendre tout à fait complets et jouables, des musiques sont en cours d’intégrations, plusieurs niveaux sont disponibles avec de la transparence, des ascenseurs, des bumpers…

Les buts à court terme:

-Corriger des bugs sur les temps d’animations, qui semblent dépendre du fps, je pense qu’utiliser le système d’évènements que j’ai développé pour les événements et utilisé pour les vecteurs est une bonne voie. -Sortir la version avec musique, merci à Mourad Achir pour m’avoir proposés ses musiques :). -Faire avancer l’éditeur graphique de personnages dont j’ai commencé le développement, ce qui permettra aux graphistes de ne pas dépendre d’un développeur, pour éditer le fichier xml qui gère les animations et évènements.

Vision long terme:

J’aimerai développer un gameplay plus complet, ajouter notamment des possibilités dans le design des niveaux, de même, si des graphistes ou character designers pouvaient s’amuser a créer des personnages un peu comme pour un muggen, si possible originaux, avec une palette de mouvements intéressantes, qu’on puisse former un ensemble plus ou moins cohérent de personnages, en essayant d’équilibrer tout ça pour qu’aucun persos ne soit “trop” puissant. Ce travail semble difficile à faire quand on est une équipe indépendante ou pire, tout seul, et l’avantage va ici aux studios de développement, mais j’aimerai voir que c’est possible. La difficulté pour moi vient beaucoup du fait de devoir m’occuper de tous les aspects du projet (développement, communication, documentation, graphisme, gameplay, test…), sur mon temps libre. Manager une équipe n’est pas simple, et en constituer une “réelle” (ce genre de projets tends a se remplir de gens qui ne font que regarder) est déjà complexe, mais je pense que c’est nécessaire pour avancer, passé le stade du concept. Aussi, intégrer une IA et un mode de jeu en réseau est un objectif à long terme, qui apporterait beaucoup au jeu, mais difficile à réaliser pour l”instant. Donc si vous connaissez des gens dont l’occupation n’est pas à la mesure de leur talents, qui ont de la motivation à s’investir (mais pas “juste” de la motivation, la capacité travailler avec un peu de constance est quand même utile), ma boite mail est toujours ouverte ;).

Bilan:

Je souhaiterai sortir une version avec quelques bugs moins critiques sous peu, ,le “peu” signifie souvent pas mal de temps, ayant du mal à me focaliser sur un seul probleme à la fois, mais je suis confiant sur le long terme, ce projet a énormént progressé depuis ses prémices, l’avancement dépends aujourd’hui de (temps libre * motivation) pour moi. La motivation vient en général quand on voit que les gens s’intéressent au projet, que ça les amuse, et le temps libre peut augmenter (à long terme, ce n’est jamais immédiat) si des gens veulent s’investir, dans la mesure de leur talents. Quand même, quelques un petit screenshots: menu jeu 1 jeu 2

migration

written by tshirtman, on 8/19/09 2:22 AM.

Passage du blog en python, (mod_python) afin de pouvoir faire une rss et ensuite des choses plus rigolotes, validation au passage, mise en forme rapide, tout ça est à peu près présentable, on verras la suite plus tard. :)

Fermat

written by tshirtman, on 8/14/09 10:51 PM.

ce programme donne tort à Fermat…
#!/usr/bin/env python
a=1
while True:
    a+=1
    print a
    for b in range(a):
        c_cube = a**3 + b**3
        c = c_cube**(1.0/3)
        if int (c) == c:
            print a,b,c
            break
… au bout d’un temps infini :).

Alter{nance à, way}

written by tshirtman, on 8/12/09 3:50 AM.

J’ai décroché mon alternance à Alterway, et j’attaque donc les cours en septembre au niveau licence à l’EFREI en alternance, back to school! :D