Connexion
Ces billets correspondent à un filtre sur: python

OpenVolunteer v0.2, second public stable release

OpenVolunteer logo

It's not a tradition, but this post will be in english unlike all the others in this blog.

The reason is that i've just release a new version of OpenVolunteer. The 0.2 released is now available for your foundation, organization or collectivity and will provide a lot of improvements in volunteers management.

Hosting

The project is hosted on google code and the plateform provides a SVN repository, Wiki, and a bug tracker. See more on Project hosting site

Changelog

Most of the changes of this new version are listed here:

New functions

  • Django v1.1 support
  • Specific forms for content management
  • Delete and add content function included in interface
  • New welcome page (lighter)
  • Comment thread for event details
  • New installation tutorials according to the facilitations made in code
  • Error management improved (404 and error codes)
  • CSV export for event answers and volunteer lists
  • Social security number and birth place indications added for volunteer data
  • Three choices answers (yes/no/maybe)
  • Mailling links
  • New logo and icons

Fixed issues

  • Vcard charset issue with outlook
  • Filtering of event on date
  • CSS optimizations
  • ...

Commentaires: 0 | Buzz it!

Firefox 3 and protocol handlers - Part 2 - ExtApp

Le précédent article s'était arrêté à présenter l'application Web de principe du gestionnaire de protocoles de Firefox 3. L'article que vous êtes en train de lire va lui s'attacher à vous permettre d'utiliser une application externe pour un protocole donné.

Un exemple d'application externe

Je vais présenter ici un petit exemple d'application en Python qui permet d'écrire dans un fichier journal (ou 'log') le contenu de la valeur passée via l'appel du protocole. Dans cet exemple le protocole utilisée est "mycall" (l'idée est de simuler la création d'un softphone appelé par une interface de click-to-call).

#!/usr/bin/python
#-*- coding: utf-8 -*-

# On importe deux bibliothèques utiles pour la suite
import sys
from datetime import datetime

# On met la date dans une variable pour tracer les résultats
date = datetime.now()

# Ici ça se complique un peu. Comme le gestionnaire de protocole
# de firefox donne en argument l'ensemble de la chaine 'href',
# nous allons enlever la chaine 'mycall:' pour ne conserver que
# la valeur décimale de cette chaine
arg = sys.argv[1][7:]

# On ouvre en écriture le fichier journal
# ('a' pour écrire à la suite)
filout = open('/path/to/log/file/calltest.log','a')

# On écrit la valeur envoyée précédée de la date
filout.write('%d/%d/%d %d:%d - Voici l\'argument donné : ' % (date.day, 
                                                              date.month,
                                                              date.year,
                                                              date.hour,
                                                              date.minute))
filout.write(arg + '\n')

# On ferme le fichier
filout.close()

On donne les droits d'exécution à ce script :

chmod +x /path/to/ext/app/call.py

L'application web

Il est maintenant temps de créer l'interface web de 'click-to-call' sur laquelle figurera le lien vers le protocole 'mycall'. Pour ceux qui ont lu l'article précédent, vous remarquerez que c'est encore plus simple.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
  <title>Web Protocol Handler Sample - Register</title>
</head>
<body>
  <h1>External protocol handler sample</h1>
  <p>This web page will install an external protocol handler for the <code>mycall:</code> protocol.</p>

  <p>Hey have you seen <a href="mycall:874781">this</a> before?</p>
</body>
</html>

Configurer firefox

Si l'interface web est encore plus simple, il faut toutefois configurer un peu Mozilla Firefox.

About:config

Pour accéder au registre de configuration de Firefox, il faut entrer l'adresse suivante dans la barre d'adresse.

about:config
  • Ensuite, il faut créer une 'nouvelle' 'valeur booléenne' (via un click droit) qui portera le nom suivant: "network.protocol-handler.expose.mycall" et mettre la valeur à "true". Cette valeur permettra d'autoriser l'utilisation de ce nouveau protocole.
  • Un second couple nom + valeur est à créer afin de pouvoir éviter un avertissement lors de l'utilisation d'une application externe: "network.protocol-handler.warn-external.mycall" qui prendra la valeur "false".

1er essai

Si vous êtes sur un système qui supporte Bash (Linux, Mac OS, BSD...), vous pouvez lancer un 'tail -f' sur le fichier journal afin d'en suivre l'évolution. Cela nécessite tout de même que le fichier existe avant. Si ce n'est pas le cas, il suffit de le créer avec :

touch /path/to/log/file/calltest.log

On lance la surveillance du fichier :

tail -f /path/to/log/file/calltest.log

On charge la page HTML qui contient le lien 'href' et on suit le lien. Une fenêtre s'affiche alors, vous permettant de choisir l'application à utiliser. Il suffit de choisir celle que vous avez créé plus haut et de cocher (si vous le souhaitez) 'se souvenir' afin de ne plus avoir à le faire ensuite.

À chaque clic, vous ajoutez normalement une ligne dans le fichier journal avec la valeur passée suite à 'mycall:'. À vous d'être imaginatif pour utiliser cette astuce au mieux.

Commentaires: 0 | Buzz it!

Python et les noms d'éléments

Je me pose sans cesse la question en codant en python (oui je débute) de savoir comment nommer mes variables, mes fonctions et mes classes... Le but étant bien sur que ce soit accepté par le langage, couramment usité par les (vrais) développeurs python, et qu'il y ai une régularité et une cohérence d'un programme à l'autre, d'un fichier à un autre etc...

D'après "Style Guide for Python Code" voici les règles à utiliser:

  • variables: minuscules  (séparation des mots pas un underscore "_")
  • fonctions: minuscules  (séparation des mots pas un underscore "_")
  • classes: commencer par une majuscule et poursuivre en minuscules (séparation des mots par une majuscules, à la camel)
N'hésitez pas à me le dire si je fais fausse route.

Commentaires: 0 | Buzz it!

Django 1.0 released!

J'ai un peu trainé (mais pour de bonnes raisons que vous verrez ensuite) à annoncer la sortie de la nouvelle version stable de Django.

Django est un framework web en python sur la base du modèle MVC (pour Modèle-Vue-Contrôleur). L'objectif de ce projet est de permettre la création rapide d'applications web tout en permettant d'obtenir de très bons résultats au niveau des performances et de la qualité du code. Bien sur c'est un framework libre (pourquoi vous en parlerais-je sinon?) qui est distribué sous licence BSD.

La version 1.0 a été annoncée le 4 septembre 2008 avec un seul petit jour de retour sur la "roadmap" annoncée. Elle embarque beaucoup de nouveautés vis à vis des versions précédentes parmit lesquelles on peut citer:

  • Support complet de l'unicode: Point noir de python lors de développement d'application web, l'unicode a été une des priorités du développement de cette version majeure.
  • Commandes personnalisées, pour une meilleure adaptabilité du code aux besoins de chaque développement d'application.
  • L'intégration de GéoDjango, une contribution qui permet d'utiliser facilement des outils de localisation géographique pour par exemple faire des calculs de distance entre deux utilisateurs ou deux objets précédemment localisés.
  • Amélioration des fonctions d'upload et de stockage de fichier. De nouveaux modes de stockages voient le jour et lors d'un upload, il est dans certains cas possible de visualiser une partie du fichier.
  • Nouvelle interface d'administration. Coder une application c'est bien, intéressant, passionant même certaines fois, mais lorsqu'il s'agit de coder la partie administration, l'entrain s'enfuie à toutes jambes... Avec Django, en deux clics, et quelques paramétrages vous obtenez une interface permettant, l'ajout/retrait de données dans vos modèles de donnée, ainsi qu'un système d'authentification fiable. Que demander de mieux dans la majorité des cas?
Bien sur, le code a aussi été revu, ainsi que la génération de documentation à partir des commentaires et bien d'autres petites ou moyennes choses. La liste complête des changements peut être trouvée ici.

Bon et "en quoi ça nous concerne tout ça?" pensez vous... Et bien, bientôt, vous consulterez ce blog, les galeries photographiques, les projets de programation sur un nouveau site web basé sur Django. Bien sur, il n'y aura pas que du Django puisque je compte y méler un peu de Dojo pour le coté Web 2.0 qui fait fureur en ce moment sur la toile. En réalité ce n'est pas tant pour suivre la tendance actuelle du Web 2.0 que pour essayer de proposer une manière de naviguer sur le site de façon agréable pour chacun.

Actuellement, je n'ai commencé que la partie fonctionnalités principales du 'blog'. Il me reste sur cette partie à proposer des flux RSS et Atom filtrés par tag ou catégorie ainsi que des possibilités de commenter les billets. Ensuite, je migrerais la gallerie photo actuelle (qui souffre d'une trop grande complexité à maintenir) vers un système plus automatisés où les dossiers sur le serveur correspondront aux albums.

@ bientôt donc pour des nouvelles de Django et de ce projet en cours de réalistation.

Commentaires: 0 | Buzz it!

Premiers pas sous Django

Il faut se rendre à l'évidence, coder une application complexe de nos jours est grandement facilité par l'utilisation de frameworks spécialisés dans un langage de programmation. Avec un bon framework et quelques connaissances dans le développement sur cette base, le travail se focalise sur l'apport de fonctionnalités plutôt que sur des algorythmes laborieux maintes fois utilisés par d'autres développeurs. En gros on évite ainsi de réinventer la roue et on se concentre sur des choses plus importantes.

MyAsterisk est une application plutôt complexe dans son ensemble (multiples scripts, interface web agissant sur ces scripts, accès à une base de donnée...), et comme l'interface web elle même, reste relativement simple (c'est d'ailleurs un des objectifs du projet), je m'intéresse depuis quelques jours à convertir le travail effectué sur un framework Python. Python est un langage qui m'attire depuis de nombreux mois et je n'avais pas eu l'occasion de me lancer dans un projet à l'aide de celui-ci. Voilà donc une opportunité, et pour ce, je potasse entre autre un cours écrit par Gérard Swinnen. C'est d'ailleurs un document (libre) que je conseille à tous les francophones qui voudraient débuter sur Python.

Bon c'est bien tout ça, mais si le langage de programation est choisi, ce n'est pas un "framework"... Et bien, dece coté, ce sera Django. Django est un framework web basé sur Python qui est utilisé sur de nombreux sites très visités, ce qui constitue une garantie non négligeable sur la qualité et la stabilité du logiciel. La communauté francophone est aussi très active et favorise mon intérêt pour ce framework (il est en effet plus agréable de débuter avec une documentation francophone et d'avoir des interlocuteurs francophones lorsqu'on bloque sur des questions de base).

Les débuts sont laborieux et mon premier test (qui se limitait à suivre les instructions d'un tutoriel pour créer une application de sondage) m'a pris beaucoup de temps pour un résultat plutôt mitigé. À moi maintenant d'utiliser ce point de départ et de le faire progresser pour mieux comprendre un système complexe qui n'a pas grand chose à voir avec la programmation web classique.

Bon je parle trop, maintenant, il y a du travail...

Commentaires: 0 | Buzz it!