PROJET AUTOBLOG


Sam et Max

source: Sam et Max

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Mail sur compilation de Python2.7 + PyQT pour Android

mercredi 12 septembre 2012 à 23:01

Dans la même veine que celui-là, on a reçu ce mail:

Hello,

Ma proposition de news:

Projet qui permet de créer un APK pour les codes Python:
https://code.google.com/p/android-python27/ (on zip son code, on le met dans res/raw et voilà)

+ la compilation de Python2.7 + PyQT pour Android.

Tcho

Hello cher inconnu, je serai ravi de discuter de tout ça avec vous, mais il faut mettre son mail dans le formulaire de contact, sinon on ne peut pas vous répondre.

En espérant que ce soit pas un nouveau plugin qui ai pêter le formulaire de contact et qui fasse sauter l’adresse de l’expéditeur.

Qu’est-ce qu’on peut faire avec Python ?

mercredi 12 septembre 2012 à 22:10

“Ouai, j’ai entendu parlé de Python, mais je sais pas… On peut faire quoi avec ?”

Des jeux vidéos et des films

Python étant très ami avec le langage C (l’implémentation de base étant CPython, et les bindings C étant faciles et courant), on peut faire des choses demandant pas mal de patate.

PyGame, une lib pour créer des jeux en 2D:

Et Blender, un modélisateur 3D dont le moteur de scripting est Pythonphone:



Civilization IV utilise également Python pour la plupart de ses tâches, Battlefield 2 pour ses addons, et Eve Online, pour la partie serveur.

Du web

Ma devise: si Youtube est écrit en Python, ça doit suffire pour mon usage.

Python ne vient pas avec des tas de raccourcis pour créer un site Web par défaut comme PHP, mais il existe de nombreux excellents outils pour ça. Nous on a une préférence pour Django pour les gros projets, et Bottle pour les petits.


Capture d'écran du logiciel 0bin

0bin

a été écrit avec Bottle

Du scripting

Ben oui quand même, à la base Python c’est un langage de scripting. Certes, qui peut faire de la POO, de l’introspection, et tout un tas de trucs puissants, mais par nature, Python excelle dans la récupération de paramètres, le parsing d’un fichier, les petits scripts rapides, etc.
Exemple de récupération de paramètre super propres en quelques lignes:

import argparse
 
parser = argparse.ArgumentParser(description="Description du programme")
 
parser.add_argument('-o', '--option', default='valeur par defaut', type=str,
                             help="Voila a quoi sert cette option",
                             )
 
parser.add_argument('text', type=str, nargs='+',
                     help="Un argument positionel obligatoire")
 
args = parser.parse_args()
 
print args.text
print args.option

Et le programme génère automatiquement le check des arguments, et un “usage”:

$ python test.py
usage: test.py [-h] [-o OPTION] text [text ...]
test.py: error: too few arguments

Mais également aussi le --help:

$ python test.py -h
usage: test.py [-h] [-o OPTION] text [text ...]
 
Description du programme
 
positional arguments:
  text                  Un argument positionel obligatoire
 
optional arguments:
  -h, --help            show this help message and exit
  -o OPTION, --option OPTION
                        Voila a quoi sert cette option

Et la récupération des arguments est simplissime:

$ python test.py Mon option
['Mon', 'option']
valeur par defaut

Bonne nouvelle, Linux et Mac viennent avec Python installé par défaut.

Des pilotes

Python est un langage de haut niveau, donc on ne l’attend pas du coté des drivers. Mais depuis Windows XP, on peut utiliser le User-Mode Driver Framework, et ainsi écrire pas mal de pilotes en appelant utilisant l’API COM.

En plus de cela, on peut taper dans le serial et l’USB, et même utiliser son téléphone comme modem ou simplement envoyer des SMS.

Il y a même des petits malins qui l’utilisent pour s’amuser avec la wiimote, ou le Kinect:

Des applications de tablettes

De plus en plus d’initiatives existent pour développer sur Android avec Python. La plus intéressante étant Kivy, qui a la bonne idée de fonctionner en plus sous Linux, Mac et Windows:

Du Desktop

Python brille dans le domaine du développement rapide et du prototypage. Pour cette raison Ubuntu l’a choisi comme langage de développement par défaut, et propose même un outil, nommé quickly, pour rapidement créer une app:

Mais Python fonctionne pour les logiciels plus costauds aussi, puisque BitTorrent est écrit en Python, comme le client DropBox, Gajim ou encore PiTiVi.

D’une manière générale, Python permet d’écrire des applications avec WX, GTK et QT (ou directement avec l’API Win32), donc les développeurs d’autres langages sont rarement perdus.

De l’analyse de données

Python vient du monde scientifique, il est donc tout à fait naturel de le retrouver dans ce domaine. La Nasa l’utilise, il y a des environnements de type Matlab, des libs pour bouffer du nombre en tas, pour s’amuser avec les matrices ou les probas, pour la bio informatique, etc.

D’une manière générale, Python remplace R, AWK, Perl, PHP, et parfois même le C.

Comme langage de plugin

Puisque Python aime bien le C, il est un excellent langage d’extensions: The Gimp, Inkscape, Nautilus, Gedit, Rhythmbox, Sublime Text… Tous utilisent Python pour permettre à d’autre de facilement étendre les fonctionalités de base.

Si vous vous demandez si vous pouvez faire ‘x’ en Python, postez un com, on vous répondra. Et si le code commence à vous démanger, on a un tas d’articles sur Python pour petits et grands.

Dois-je apprendre Python 2 ou Python 3 ?

mercredi 12 septembre 2012 à 15:57

Les deux versions étant incompatibles, et Python 3 ayant plein de super fonctionnalités que Python 2 n’a pas, mais la V2 étant encore très répandue, on peut se demander lequel on doit apprendre.

Etat du lard

Python 3 permet de s’affranchir de beaucoup de problèmes d’encoding en utilisant unicode par défaut. A partir de la version 3.3, il va venir avec un virtualenv intégré, et distutils2, rendant le packaging et le déploiement beaucoup plus simple. Sans compter la délégation à un sous générateur. Plus besoin non plus d’utiliser ‘object’ dans l’héritage, et des tas de libs nettoyées. Bref, un comportement plus simple et un langage plus beau.

Python 2 lui est néanmoins présent encore partout:

Enfin, l’outil 2to3 permet de convertir automatiquement, et facilement, la plupart des codes de Python 2 vers Python 3.

Apprentissage et usage

Dans la vie de tous les jours, en tant que programmeur Python, vous allez donc forcément être confronté à Python 2 pendant encore 3 ou 4 ans. Je rappelle que Python 2.4 était encore assez courant il y a deux ans, et qu’il y a 5 ans je lisais encore des questions sur les fora concernant Python 2.2.

Or, Python 2 est plus compliqué que Python 3, il demande des connaissances particulières: gérer l’encoding, setuper son virtualenv, faire gaffe à bien utiliser ‘object’, connaitre les noms des libs mal standardisés, etc.

Dans tous les cas, il sera toujours beaucoup plus simple d’apprendre Python 2 et de passer à Python 3 que l’inverse, et il est improbable que vous n’ayez pas besoin de toucher un code en Python 2. Hey, nous même, nous codons encore tous nos projets en Python 2. On se posera la question de la migration quand Django l’aura fait, et même là, on aura des tas de projets qui resteront pour toujours en V2.

Donc, si vous apprenez (ou enseignez le Python), le choix le plus pragmatique est d’apprendre avec Python 2, et de rajouter l’apprentissage des différences entre la V2 et la V3. Ce faisant vous saurez aussi comment faire migrer un projet, ce dont il est possible que vous ayez un jour besoin.

Certains films pornos passent le Test Bechdel

mardi 11 septembre 2012 à 18:09

Le féministe est un sujet qui fait son come back sur le devant de la toile en ce moment, ce qui est rafraîchissant étant donné qu’Internet est quand même un domaine très orienté couilles velues, malgré des petits villages gaulois qui résistent encore et toujours…

Et malgré notre propension à faire des blagues machos (et racistes, et antisémites, et pédophiles, et sur les handicapés, et sur les handicapés pédophiles antisémites), on a parfois des discussions plus sérieuses (mais tout aussi inutiles) comme “putain ‘le Seigneur Des Anneaux’ ne passe pas le Bechdel test mais ‘Entre Matures 4′ oui”.

Qu’est-ce que le test Bechdel ?

C’est un test informel pour vérifier si une œuvre culturelle est formatée par les stéréotypes de notre société patriarcale. En gros pour savoir si un film est macho.

Il a hérité du nom de la dessinatrice Alison Bechdel, connue principalement au travers de sa bande dessinée Dykes to Watch Out For, qui a la particularité de mettre en scène des personnages principaux lesbiennes. Dans la planche intitulée “The Rule”, une protagoniste déclare qu’elle ne va voir une film que si il répond aux critères suivant:

Ce qui est marrant quand on regarde la liste des films qui passent ou non, c’est d’abord que, ben la majorité ne passent pas, même d’excellents films comme Retour vers le futur  ou Star Wars (c’est plutôt des histoires de mec), ni encore Big Fish ou Amelie Poulain (alors que c’est pas forcément orienté testostérone).

Pour passer le test, il faut regarder du côté des héroïnes féminines: Alien, Kill Bill, Juno, etc. Ou alors dans les films avec beaucoup de personnages féminins: Les invasions barbares, 8 femmes, Battle Royale…

Notez que j’essaye de lister uniquement des très bons films ici, et qu’écrire les deux paragraphes ci-dessus, c’est la moitié du temps de rédaction de l’article.

Dans tous les cas, le ratio est assez inquiétant. Il faut dire que la majorité des réalisateurs et scénaristes sont des mecs.

Peut-on se prendre une bite dans le cul avec dignité ?

Ce qui est marrant avec ce test, c’est que comme tout règle en socio, on peut trouver des contre exemples. Et dans notre cas, on le retrouve dans le domaine du porno. Car si les films de cul ne brillent pas pour leurs dialogues (surtout les quick shots qui sont maintenant la norme sur les tubes, où il n’y a même plus de scénario), les personnages sont tous égaux sur le temps de parole. Et les noms, rarement cités dans le film, sont presque toujours sur la jaquette :-)

Mais surtout, les boulards ont une très grande diversité de mise en forme, à défaut de diversité de sujet.

On a donc les films lesbiens, avec des personnages féminins, qui forcément, ne parlent pas d’un homme. Ce qui est fendard, puisque ces films sont faits avant tout pour un publique masculin. Par exemple, Fly Me et ses HOTesses de l’air. Penny à l’air particulièrement conne, mais on lui pardonne.

Et puis il y a la merveille de l’international, merci-internet-je-t-aime, dans lequel on peut découvrir des genres nouveaux, comme le sexe familial japonais. Notez les deux meufs qui parlent du journal pendant que l’autre se fait démonter sur une chaise. J’apprécie aussi le floutage du dit journal. C’est vrai que ça aurait gâché la prise.

Et bien entendu on a le SM, qui implique un dialogue de soumission, certes succin (et parfois en Allemand : -)), mais bien réel. Perso si ma machine à laver commence à faire le bruit que Jordan fait à la scène du vibro, je m’inquiète.

Je n’ai pas de conclusion intelligente à cet article qui ne l’est de toute façon pas, alors je vous laisse sur une trouvaille: The Spider and the Fly. Ils se donnaient du mal à l’époque.

Se faciliter les imports avec les fichiers *.pth

lundi 10 septembre 2012 à 18:49

Dans un article, nous parlions des extensions alternatives en Python, et notamment de l’usage des fichiers *.pth. Néanmoins cette extension est souvent mal comprise, et voici un comment en profiter au maximum.

En Python, on a souvent des problèmes d’import: la lib est dans un dossier au dessous, ou à côté, ou à l’autre bout du disque dur, et ça plantouille parceque Python ne trouve pas le module.

Il existe plein de moyens de jouer avec le fameux PYTHON_PATH qui contient la liste des dossiers dans lesquelles chercher les libs, et la plupart sont fort verbeuses et répétitives, du genre:

import os
import sys
 
CUR_DIR = os.path.dirname(os.path.realpath(__file__))
sys.path.extend([
    os.path.join(CUR_DIR, 'apps'),
    os.path.join(os.path.dirname(CUR_DIR), 'libs'),
    os.path.join(os.path.realpath('~'), '.local_libs')
]]}

Une manière simple est d’utiliser un fichier *.pth: on créé un fichier texte, on le nomme comme-on-veut.pth (moi je me fais pas chier, je le nomme .pth comme ça c’est court et c’est caché sous nunux), et on liste tous les dossiers qu’on veut ajouter au PYTHON_PATH, y compris avec des chemins relatifs.

Oui mais, argh parmi les argh, la première fois qu’on le fait, ça ne marche pas. Alors on cherche dans la doc, et là, fustration, on apprend que les fichiers *.pth ne sont parsés que dans les sites directories, c’est à dire les dossiers officiels du système dans lesquels sont censés être les libs de la bibliothèque standard. Donc pas le dossier courant.

Eh oui, ces fichiers ont été conçus pour faciliter les déploiements, du genre quand on fait un setup.py pour son app, pas pour nous, pauvres mortels.

Heureusement il y a une solution Sam et Max à tout, et ici elle consiste à faire:

import os
import site
 
CUR_DIR = os.path.dirname(os.path.realpath(__file__))
site.addsitedir(CUR_DIR)

Quelque part dans son code n’importe où qui est sûr d’être éxécuté tôt, par exemple dans Django, dans le settings.py. Ca ajoute le dossier du projet en tant que site directory, et donc le fichier .pth est parsé. On peut alors dumper son listing dedans sans avoir à le répéter dans tous les scripts et fichiers qui doivent l’utiliser (et ainsi modifier cette liste facilement).

Attention cependant, celà rajoute votre dossier de projet dans le PYTHON_PATH, rendant tout ce qu’il contient importable. Normalement, c’est ce que vous voulez, mais si ce n’est pas le cas, vous pouvez avoir une gestion plus fine en ajoutant juste le fichier .pth avec site.addpackage(CUR_DIR, 'fichier.pth', set())

La feature de magie noire

Dans les fichiers *.pth, il y a un support limité de la syntaxe Python: on peut commenter des lignes avec # et faire des import truc.

Sauf que si vous êtes curieux, vous verrez le détail qui tue dans l’implémentation:

if line.startswith(("import ", "import\t")):
    exec line

On peut donc virtuellement mettre n’importe quel code Python dans les fichiers *.pth. Par exemple:

../foo
import sys; print "Foo a été ajouté au PYTHON PATH"

Va afficher “Foo a été ajouté au PYTHON PATH” au démarrage du programme. Amusant. Et tellement de potentiels pour faire des trucs tordus !