SunWukong's Blog

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 9 mai 2008

Journées Python 2008

Python est un langage de programmation relativement simple à apprendre (sûrement l'un des meilleurs, voire le meilleur, pour apprendre à programmer) qui permet de développer absolument tout type de programmes : des applications lourdes classiques, des applications client-serveur, des applications Web et même de simples scripts. Comme Python est fourni avec les piles, on peut vraiment tout faire avec : des applications de gestion, des jeux, des serveurs, des interfaces graphiques, des programmes de simulation, de la robotique,… De plus, Python s'insinue partout : dans les PC Linux, il est installé en standard dans les machines d'Apple, il est sous Windows, il est dans mon téléphone Nokia S60, il est dans des machines virtuelles Java, dans les machines virtuelles Microsoft CLR.truc.Net, il est même dans des satellites autour de la planète (mais pas sous Windows car personne n'est là-haut pour appuyer sur CTRL+ALT+SUPPR ! )

Devant cette ubiquité, les grandes entreprises qui préparent l'informatique de demain s'arrachent les gourous du langage Python : Guido van Rossum, créateur du langage et dictateur bénévole à vie de son développement, a été recruté l'an dernier par Google. Ted Leung et Frank Wierzbicki viennent d'être embauché par Sun Microsystems.

En France, l'association francophone Python (AFPY) assure la promotion du langage et organise le week-end prochain, les 17 & 18 mai 2008, une série de conférences et d'ateliers autour de la technologie Python. Cerise sur le gâteau : alors que pour assister à ce genre d'événements il faut débourser jusqu'à parfois des milliers d'euros, l'entrée Pycon 2008 est libre et gratuite ! Et si vous ne pouvez pas vous rendre sur place à la cité des Sciences et de l'Industrie à Paris, ou que vous n'avez pas envie d'aller à Paris (ce qui est ma foi bien légitime), sachez que l'ensemble des conférences seront disponibles en direct sur le web et en téléchargement par la suite. Si vous pensez qu'avec une organisation pareille, Python doit être un langage extraordinaire, vous avez tout bon !

Après un dernier lien vers les programmes des festivités, il ne me reste plus qu'à vous conseiller la lecture d'un très bon livre en français très didactique sur Python, disponible gracieusement sur le Web de par la volonté de son auteur : Apprendre à programmer avec Python.

C

lundi 26 novembre 2007

Django (2)

Voici mon modèle de départ :

# -*- coding: utf-8 -*-
from django.db import models
#
# Create your models here.
#
class Personne(models.Model):
   USER_GENDER = (
      ("F", "Femme"),
      ("H", "Homme"),
      ("X", "Non précisé"))
   nom = models.CharField(maxlength=30)
   prenom = models.CharField(maxlength=30)
   pseudo = models.CharField(maxlength=30)
   email = models.EmailField()
   website = models.URLField()
   instantmsg = models.CharField(maxlength=30)
   naissance = models.DateField()
   sexe = models.CharField(maxlength=1, choices=USER_GENDER)
   adresse = models.TextField()
   codepostal = models.CharField(maxlength=5)
   ville = models.CharField(maxlength=30)
   pays = models.CharField(maxlength=30)
   telrtc = models.PhoneNumberField()
   telfax = models.PhoneNumberField()
   telgsm = models.PhoneNumberField()

Et voici mon fichier urls.py

# -*- coding: utf-8 -*-
urlpatterns = patterns('',
   # Example:
   # (r'^myblog/', include('myblog.foo.urls')),
   (r'^personne/(/d+)/$', personne_view),                  # Consultation d'une personne
   (r'^personne/new/$', personne_new),                     # Nouvelle personne
   (r'^personne/edit/(/d+)/$', personne_edit),             # Edition d'une personne
   (r'^personne/delete/(/d+)/$', personne_delete),         # Suppression d'une personne
   (r'^personne/search/([A-Za-z]+)/$', personne_delete),   # Suppression d'une personne
)

De recopier mon code ici, j'en fais une petite revue un peu plus détaché et du coup, il me semble que je dois pouvoir nommer les paramètres que je récupère dans les URLs. Ça serait plus pratique.

Je dois donc m'attaquer maintenant aux templates. En fait, j'ai commencé à regarder du côté des vues génériques. Nul doute que ça marche ;-) mais je dois encore réfréner cette envie de mettre la charrue avant les bœufs : je vais donc calmement coder mes templates et bien baser mon apprentissage de Django sur de bonnes bases, plutôt que de foncer en survolant l'architecture du framework.

Bon, j'espère que je vais avancer plus vite. Quand je pense au tutoriel de Siddhi où l'on assiste à la création d'un wiki en 20 minutes, de façon si logique, facile, naturelle ! :-)

dimanche 25 novembre 2007

Premiers pas de Django

Django est un framework de développement d'applications Web pour le langage Python. C'est LE framework des perfectionnistes, ainsi qu'il se définit ;-).

Pour l'heure, ce ne sont plus exactement mes pas. Mais à chaque tentative précédente, j'avais débordé d'ambition, tentant d'apprendre le framework en même temps que le langage, en partant à chaque fois bille en tête avec un modèle de données relativement complexe. De quoi se décourager. Aussi, cette fois, je vais me fixer des objectifs simples et complexifier au fur et à mesure, par itération. Agile, soyons agile !

Je vais par la suite consigner ici les problèmes rencontrés dans mon développement afin de pouvoir en garder une trace et de diminuer les temps de blocage ultérieurs quand je retomberai sur ces difficultés.

Je pars d'un modèle simple : une table unique, implémentant un choix assez large de type de données différents qui me permettront de voir plusieurs type de contrôles dans les forms générées. Au niveau de la dynamique, j'implémente les classiques opérations CRUD. J'aimerais bien me lancer dans une architecture REST, convaincu par la lecture du blog du Biologeek, mais là aussi, je me préfère me forcer au plus simple pour revenir là-dessus plus tard.

Dans un premier temps, je vais donc implémenter une Personne, comprenant de nombreuses caractéristiques (nom, prénom, pseudo, email, website, instantmsg, naissance, sexe, adresse, codepostale, ville, pays, telrtc, telfax, telgsm) et créer les pages nécessaires pour créer, éditer, consulter, rechercher et supprimer une instance de Personne.

Dans un deuxième temps, je rattacherai cette entité à l'entité User de l'application d'authentification intégrée à Django et rendrai mon site accessible uniquement aux utilisateurs enregistrés.

Dans un troisième temps, je créerai une autre entité possédant une relation avec Personne, comme une Entreprise par exemple. Doucement mais sûrement, sinon je suis encore capable de pondre un modèle de CRM complet et de m'y noyer. On fera la CRM plus tard ;-)

Voici donc au fil du temps les problèmes sur lesquels j'ai buté.


If you happen to land here with Google Airlines and that you think the answer of your problem is here, burried under French words, you can contact me in English. Chinese may also be an alternative.


Les paramètres de base de données sont renseignés dans le fichier settings.py, à la racine du projet. Pour ma part, j'ai opté pour PostgreSQL, probablement la meilleure base de données relationnelle opensource. Et j'ai rapidement buté sur un message d'erreur : « psycopg2.OperationalError: FATAL: authentification Ident échouée pour l'utilisateur « dev » » Et oui, PostgreSQL a le bon goût d'être en français, une localisation parmi de très nombreuses autres. Pour le coup, Google ne m'a pas trop aidé, mais j'ai réussi à identifier le problème. Si Django indique que « Set to empty string for localhost. » il s'est avéré que dans mon cas, ce n'était pas le cas : bien que travaillant en local, le paramètre DATABASE_HOST doit bien être renseigné à localhost. Il faudra donc se méfier des affirmations futures ;-)

mardi 20 novembre 2007

eric4 et Gutsy Gibbon

Et voilà, il suffisait que j'avoue ici ne pas réussir à installer eric4 sous Gutsy Gibbon pour que j'y parvienne quelques minutes plus tard ! Il faut dire qu'entre temps, j'ai englouti le dîner qu'avait préparé ma chère et tendre :-) Ça aide, un ventre plein !

Je vais essayer de retranscrire ici les manips effectuées pour parvenir à cela. Je dis « essayer » car j'ai repris le travail commencé il y a plusieurs semaines et bien évidemment, je n'avais rien noté à l'époque, ayant toujours fait chou blanc.

Eric4 est hébergé sur Sourceforge, . Il est intégralement francisé. À l'intérieur de l'archive, un fichier README précise la procédure d'installation dans l'hypothèse où le paquet-tout-prêt n'existerait pas encore :


  1. Install Qt4
  2. Build and install sip
  3. Build and install QScintilla2
  4. Build and install PyQt4
  5. Build and install QScintilla2 Python bindings
  6. Install eric4

Qt4 et PyQt4 sont bien packagés dans Ubuntu. sip peut être trouvé ici

Pour l'heure, Google a été une fois de plus mon ami. Rendons à Cezar ce qui est à Cezar : la solution.

Au stade où j'en étais, il m'a donc suffi d'installer le paquet Debian python-qscintilla2, nécessitant lui-même la bibliothèque libqscintilla2-3. Ces deux paquets ne sont pas dispo dans Ubuntu, mais sont accessibles sur http://packages.debian.org . Une fois téléchargés, ils s'installent d'un simple sudo dpkg -i paquet.deb

Puisque mon précédent billet portait sur l'aberrante orgie de mémoire RAM organisée par eclipse, je n'ai pas manqué de relever l'empreinte mémoire d' eric4 à l'aide d'un pmap -x pid. Même si je trouve que cela fait beaucoup, le résultat est tout de même 6 fois inférieur à eclipse, avec 120Mo. Décidément, il n'y a pas à dire : Java sucks & Python rulez !

Pour finir, je laisse un lien sur quelques tutoriels pour bien démarrer avec eric.

La mémoire s'éclipse !

Dans ma quête d'un éditeur, ou plutôt un IDE, propice pour développer en Python, je viens de jeter un œil à PyDev, un plugin pour eclipse : un IDE donné par IBM à la communauté. Fouinant ici et là à la recherche de tutoriels pour dégrossir mon apprentissage du couple eclipse/pydev, j'ai lu au passage que le cadeau d'IBM était estimé à 40 M$US. Même si le billet vert ne vaut plus grand chose, c'est quand même un gros cadeau.

Gutsy Gibbon ayant parfois des comportements erratiques, je fais souvent tourner un htop dans une console, y jetant un rapide coup d'œil dès lors qu'un process semble s'approprier les ressources CPU. C'est là que j'ai vu l'ampleur du sinistre : eclipse nécessite une quantité de mémoire proprement indécente ! Je pense avoir une station de travail relativement confortablement pourvue, avec 2Go de RAM[1]. Mais là, j'ai un peu de swap !

La commande pmap permet d'obtenir l'empreinte mémoire d'un processus, à partir de son processID. Pour eclipse, le résultat est affligeant : 720Mo !!! Avec Firefox et Thunderbird qui se goinfrent chacun 130Mo, c'est une barrette de RAM de 1Go qui est engloutie.

Je crois que je vais revenir à Eric, un sympathique IDE développé avec PyQT. Malheureusement, le gibbon est un peu à la ramasse, proposant toujours la v3 dans ses paquets et je ne parviens pas à installer la v4 à la mano.

Notes

[1] Si cela doit être à peine suffisant pour faire tourner Vista, c'est habituellement très confortable sous Linux