| [tarek] Distutils nighlty builds If you want to work (or try to find some bugs in it to help out) with the latest bleeding-edge Distutils trunk version... | 03/07/2009 |
|
|
If you want to work (or try to find some bugs in it to help out) with the latest bleeding-edge Distutils trunk version that will be shipped with Python 2.7 and Python 3.2, you can do it now !
I am creating a nighlty build every day here now : http://nightly.ziade.org/
This distribution can be installed in [...]
|
||
| [tarek] Dropping PEP 386 (versions comparison) As you might know, we are working hard on Distutils side for Python 2.7 and 3.2 upcoming releases. The b... | 03/07/2009 |
|
|
As you might know, we are working hard on Distutils side for Python 2.7 and 3.2 upcoming releases. The biggest work is on PEP 376, that will introduce among other things a uninstaller function and functions to query installed distributions.
The other “big” work is on PEP 345. We want to introduce a new metadata field [...]
|
||
| [nsteinmetz] Couchapp : créer votre première application CouchDB (Part... ... | 02/07/2009 |
|
|
La dernière fois, je vous ai laissé avec pas grand chose, à savoir couchapp installé et une squelette d'application. Aujourd'hui, nous allons être nettement plus ambitieux en prenant comme prétexte une application de gestion de favoris (à la delicious, en mode mono-utilisateur). Nous allons aborder le rendu d'un document en tant que tel (aka "show") et les listes de documents (aka "list"). Avant toute chose... couchapp !Générons notre petite application : couchapp-cloned mycouchapp tetram:CouchDB nicolas$ couchapp generate mycouchfav [INFO] Generating a new CouchApp in /Users/nicolas/Documents/Projets/CouchDB/mycouchfav Et poussons notre application dans notre instance CouchDB (que vous avez démarré par ailleurs) : tetram:CouchDB nicolas$ cd mycouchfav/ tetram:mycouchfav nicolas$ couchapp push myfav [INFO] Pushing CouchApp in /Users/nicolas/Documents/Projets/CouchDB/mycouchfav to design doc: http://127.0.0.1:5984/myfav/_design/mycouchfav [INFO] Visit your CouchApp here: http://127.0.0.1:5984/myfav/_design/mycouchfav/index.html Vinrent ensuite les documentsCommençons par nous créer trois favoris depuis Futon ( http://localhost:5984/_utils/) avec la structure suivante :
Ci-après mon jeu d'exemple au format json : { "_id": "couchdb", "_rev": "3-1834349775", "title": "CouchDB Official site", "url": "http://couchdb.apache.org/", "description": "Apache CouchDB is a distributed, fault-tolerant and schema-free document-oriented database accessible via a RESTful HTTP/JSON API", "tag": [ "couchdb", "database", "document" ] } { "_id": "couchdbkit", "_rev": "2-1087649587", "title": "Couchdbkit", "description": "Couchdbkit goal is to provide a framework for your Python application to access and manage Couchdb.", "url": "http://www.couchdbkit.org/", "tag": [ "couchdb", "python", "framework" ] } { "_id": "couchapp", "_rev": "2-3730993466", "title": "couchapp", "description": "Utilities to make standalone CouchDB application development simple", "url": "http://github.com/couchapp/couchapp/tree/master", "tag": [ "couchdb", "python", "ruby" ] } Tu me le montres ton document ?L'url pour accéder à un document est du type : http://localhost:5984/<nom_de_la_db>/_design/<nom_du_design>/_show/<nom_du_show>/<id_du_document> Dans notre cas, par ex : http://localhost:5984/myfav/_design/mycouchfav/_show/fav/couchdbkit (si je prends le favori ayant pour id "couchdbkit". Vous venez de déduire que mon "show" se nomme "fav". Plus exactement, il s'agit du fichier show/fav.js avec le contenu suivant : function(doc, req) { // !json templates.fav // !code vendor/couchapp/template.js // !code vendor/couchapp/path.js return template(templates.fav, { title : doc.title, url : doc.url, description : doc.description, assets : assetPath(), } ); } Expliquons ce qu'il contient :
Il nous resque plus qu'à construire le fichier templates/fav.html :
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<div id="header"></div>
<div id="content">
<h1><a href="<%= url %>"><%= title %></a></h1>
<div class="body"><%= description %></div>
</div>
</body>
<script src="/_utils/script/json2.js"></script>
<script src="/_utils/script/jquery.js?1.2.6"></script>
<script src="/_utils/script/jquery.couch.js"></script>
<script src="<%= assets %>/vendor/couchapp/jquery.couchapp.js"></script>
</html>
Il ne nous reste plus qu'à .... et non pas visualiser votre page mais au préalable pousser vos fichiers dans votre instance CouchDB : tetram:mycouchfav nicolas$ couchapp push myfav [INFO] Pushing CouchApp in /Users/nicolas/Documents/Projets/CouchDB/mycouchfav to design doc: http://127.0.0.1:5984/myfav/_design/mycouchfav [INFO] Visit your CouchApp here: http://127.0.0.1:5984/myfav/_design/mycouchfav/index.html Maintenant, ouvrez votre navigateur sur l'url http://localhost:5984/myfav/_design/mycouchfav/_show/fav/couchdbkit et vous retrouvez le contenu très sommairement présenté de votre favori avec son titre, son url et sa description. En conclusion, pour afficher un document, il nous faut :
Et ta liste, tu me la montres aussi ?Pour les listes, c'est un peu plus complexe mais pas insurmontable L'url est du type : http://localhost:5984/<nom_de_la_db>/_design/<nom_du_design>/_list/<nom_de_la_liste>/<nom_de_la_vue>?<paramètres> Supposons que je veuille créer la page d'accueil de mon application, celle-ci listant tous les favoris stockés. Le nom de la liste pourrait donc tout naturellement s'appeller "all" et le nom de la vue "favs". On pourrait imaginer avoir une liste "search" par ex pour afficher les résultats d'une recherche sur les favoris avec des paramètres de recherche. Il faut donc bien avoir en tête qu'une liste est un moyen d'afficher une vue. Une même vue peut donc partager plusieurs listes. Ex : http://localhost:5984/myfav/_design/mycouchfav/_list/all/favs http://localhost:5984/myfav/_design/mycouchfav/_list/search/favs?limit=25&key=%22python%22 Commençons donc par créer notre vue, avec le fichier views/favs/map.js function(doc) { emit(doc._id, {title: doc.title, description: doc.description, url:doc.url }) }; Cette fonction me renvoi tous les documents de mon instance, trié par "_id" et avec une série de variables (title, description, url - je ne les réexplique pas, ce sont les mêmes que précédemment). Passons à notre liste : lists/all.js function(head, row, req, info) { // !json templates.all // !code vendor/couchapp/path.js // !code vendor/couchapp/template.js return respondWith(req, { html : function() { if (head) { return template(templates.all.head, { assets : assetPath(), }); } else if (row) { return template(templates.all.row, { fav: row.value, }); } else { return template(templates.all.tail, { assets : assetPath(), }); } }, }) }; La nouveauté ici tient dans la fonction qui prend différents paramètres en compte (contenus honteusement récupérés de benoitc "Légo 2 : les listes"):
L'autre nouveauté tient dans la gestion des templates HTML :
Contenu de templates/all/head.html :
<!DOCTYPE html>
<html>
<head>
<title>My favs</title>
<link rel="stylesheet" href="../../screen.css" type="text/css"/>
</head>
<body>
<div id="header">
<h2>My favs...</h2>
</div>
<div id="content">
<h1>Recently...</h1>
<dl id="bookmarks">
Contenu de templates/all/row.html : <dt><a href="<%= fav.url %>"><%= fav.title %></a></dt> <dd><%= fav.description %></dd> Contenu de templates/all/tail.html :
</dl>
</div>
</body>
<script src="/_utils/script/json2.js"></script>
<script src="/_utils/script/jquery.js"></script>
<script src="/_utils/script/jquery.couch.js"></script>
<script src="<%= assets %>/vendor/couchapp/jquery.couchapp.js"></script>
</html>
Il ne vous reste plus qu'à pousser vos modifications dans votre instane CouchDB (ici en mode verbeux pour bien voir ce qui est poussé) : tetram:mycouchfav nicolas$ couchapp push -v myfav [INFO] push lists/all.js [INFO] push shows/fav.js [INFO] push templates/all/head.html [INFO] push templates/all/row.html [INFO] push templates/all/tail.html [INFO] push templates/fav.html [INFO] push vendor/couchapp/_attachments/jquery.couchapp.js [INFO] push vendor/couchapp/couchapp.js [INFO] push vendor/couchapp/date.js [INFO] push vendor/couchapp/path.js [INFO] push vendor/couchapp/README.md [INFO] push vendor/couchapp/template.js [INFO] push views/favs/map.js [INFO] process code macro: /Users/nicolas/Documents/Projets/CouchDB/mycouchfav/vendor/couchapp/template.js [INFO] process code macro: /Users/nicolas/Documents/Projets/CouchDB/mycouchfav/vendor/couchapp/path.js [INFO] process code macro: /Users/nicolas/Documents/Projets/CouchDB/mycouchfav/vendor/couchapp/path.js [INFO] process code macro: /Users/nicolas/Documents/Projets/CouchDB/mycouchfav/vendor/couchapp/template.js [INFO] Pushing CouchApp in /Users/nicolas/Documents/Projets/CouchDB/mycouchfav to design doc: http://127.0.0.1:5984/myfav/_design/mycouchfav [INFO] Visit your CouchApp here: http://127.0.0.1:5984/myfav/_design/mycouchfav/index.html Rendez vous ensuite sur : http://localhost:5984/myfav/_design/mycouchfav/_list/all/favs Au bout du compte, nous venons de voir pour les listes :
Au bout de cette "journée"Nous avons vu aux termes des parties 1 et 2 :
Il reste encore plein de choses à voir (au moins à mon niveau) :
Sources utilesLes lectures indispensables pour faire ce tutoriel :
Au passage, les nouveautés de CouchDB / Couchapp mentionnées pat Benoit sont des plus intéressantes (surtout pour les listes, plus souple/flexible a priori). Merci à benoitc pour éclairer ma lanterne sur couchdb/couchapp ces derniers jours |
||
| [segle] PHP 5.3 est là, mais je ne l’attendais pas… ... | 30/06/2009 |
|
|
En tant que développeur, PHP est le langage que j’utilise le plus.
Au boulot, en dehors, c’est toujours PHP. PHP 5 avait apporté de nombreuses nouvelles choses pour une syntaxe pour la POO plus claire.
Mais maintenant que j’ai pu goûter à Python, à Ruby, des langages vraiment objets, puissants, à la syntaxe moins laxiste, j’ai de [...]
|
||
| [tarek] mod_ntlm in FreeBSD We had to install mod_ntlm under a FreeBSD 6.4 server with a colleague, but the port for this package seems broken at least... | 30/06/2009 |
|
|
We had to install mod_ntlm under a FreeBSD 6.4 server with a colleague, but the port for this package seems broken at least for FreeBSD 6.2 and 6.4. It just doesn’t work when it initiates an NTLM session through SMB, and it seems to be compiled without the log support so the last log you [...]
|
||
| [gawel] Facebook connect with python A few weeks ago I've discover Facebook Connect . So I decide to try to use it in a new project. It look like an... | 29/06/2009 |
|
|
A few weeks ago I've discover Facebook Connect. So I decide to try to use it in a new project. It look like an easy way for new user to register in my application. The first step is to follow the Quick start guide. Then whe need to take care of Facebook in our application. There is already a cool python library to play with Facebook called pyfacebook. So you need to install it. In my project I aleady use repoze.what for authentification. It just rocks. So i decide to write an IIDentifier plugin for Facebook: import sha
import facebook
from webob import Request
from zope.interface import implements
from repoze.who.interfaces import IIdentifier
DEFAULT_FIELDS = ['uid', 'name', 'first_name', 'birthday', 'relationship_status',
'proxied_email', 'sex', 'hometown_location',
'pic', 'pic_big', 'pic_small', 'pic_square']
class Params(dict):
def __getattr__(self, attr):
return self.get(attr, '')
def __html__(self):
return repr(self)
class Facebook(object):
implements(IIdentifier)
def __init__(self, api_key, secret_key):
self.api_key = api_key
self.secret_key = secret_key
def identify(self, environ):
req = Request(environ)
# initialize the api object
fbapi = facebook.Facebook(self.api_key, self.secret_key) # init pyfacebook instance
if fbapi.check_session(req):
environ['repoze.who.fb'] = fbapi
user = fbapi.users.getInfo([fbapi.uid], DEFAULT_FIELDS)[0]
# we used the proxied_email and a generated password to retriave
# the user from our DB
user.update(
login=user['proxied_email'],
email=user['proxied_email'],
password=sha.new('%s%s' % (fbapi.uid, self.secret_key)).hexdigest(),
)
# we store the facebook data in environ
environ['repoze.who.fbuser'] = Params(user.items())
return user
def remember(self, environ, identity): pass
def forget(self, environ, identity): pass
At the first time there is no user in our DB. So the user isn't really connected to our interface. The trick is to use a javascript callback to show a registration form to the user with fields pre-filled with Facebook's data. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head></head>
<body>
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript">
</script>
<fb:login-button onlogin="facebook_onlogin();"></fb:login-button>
<script type="text/javascript">
FB.init("YOUR_API_KEY_HERE", "xd_receiver.htm");
var facebook_onlogin() function() {
// here is the trick
window.location.href = '/register/facebook';
}
</script>
</body> </html>
When the form is submitted, you need to create the real user in your application. That's all ! |
||
| [nsteinmetz] Couchapp : créer votre première application CouchDB (Part... ... | 27/06/2009 |
|
|
Je continue ma découverte de CouchDB avec Couchapp, logiciel qui se définit comme un ensemble d'outils pour simplifier le développement d'une application avec CouchDB. Ce billet chercher à compléter / mettre à jour le billet de Benoit Chesneau : "Et les légos s'emboitèrent" que je vous conseille de lire par ailleurs. Installation de Couchapptetram:CouchDB nicolas$ sudo easy_install couchapp Cela vous installe couchapp 0.3.2 à ce jour. Génération du squelette de votre applicationtetram:CouchDB nicolas$ couchapp generate mycouchapp [INFO] Generating a new CouchApp in /Users/nicolas/Documents/Projets/CouchDB/mycouchapp Le contenu est le suivant : tetram:CouchDB nicolas$ ls mycouchapp/ _attachments lists vendor lib shows views Pour pousser votre application dans votre instance CouchDB dans une base "monapp" : tetram:CouchDB nicolas$ cd mycouchapp/ tetram:mycouchapp nicolas$ couchapp push monapp -v [INFO] push vendor/couchapp/_attachments/jquery.couchapp.js [INFO] push vendor/couchapp/couchapp.js [INFO] push vendor/couchapp/date.js [INFO] push vendor/couchapp/path.js [INFO] push vendor/couchapp/README.md [INFO] push vendor/couchapp/template.js [INFO] Pushing CouchApp in /Users/nicolas/Documents/Projets/CouchDB/mycouchapp to design doc: http://127.0.0.1:5984/monapp/_design/mycouchapp [INFO] Visit your CouchApp here: http://127.0.0.1:5984/monapp/_design/mycouchapp/index.html [INFO] Attaching index.html (413) [INFO] Attaching style/main.css (21) [INFO] Attaching vendor/couchapp/jquery.couchapp.js (6984) Si vous ouvrez votre navigateur sur http://127.0.0.1:5984/monapp/_design/mycouchapp/index.html, vous voyez l'écran suivant :
A ce stade, 2 commandes ont été utilisées :
Si vous voulez récupérer une application de couchdb, il faut utiliser la commande "clone". Cela permet d'éditer votre application couchdb depuis votre disque dur et non plus depuis futon par ex. Au passage, vous ne pouvez pas cloner votre application dans le même répertoire que l'initial : tetram:mycouchapp nicolas$ cd .. tetram:CouchDB nicolas$ couchapp clone http://127.0.0.1:5984/monapp/_design/mycouchapp [CRITICAL] an app already exist here: mycouchapp Il vous faut donc spécifier un chemin différent : tetram:CouchDB nicolas$ couchapp clone http://127.0.0.1:5984/monapp/_design/mycouchapp mycouchapp-cloned [INFO] Cloning mycouchapp to mycouchapp-cloned... tetram:CouchDB nicolas$ ls mycouchapp-cloned/ _attachments lib shows views couchapp.json lists vendor A noter que la version clonée a un fichier couchapp.json en plus et donc je ne connais pas encore l'intérêt / l'utilité à ce stade. Si on revient un instant sur ces répertoires :
Voilà pour un début, dès que je suis plus clair sur les listes / vues / rendus, vous aurez droit à un autre billet |
||
| [glooze] Python (entre autres) sur Android ! ... | 09/06/2009 |
|
|
J’en ai rêvé, google l’a fait.
Ca s’appelle Android Scripting Environment, ça a accès (selon leurs dires) à la plus grosse partie des API pour faire mumuse avec le système, et ça supporte Python, Lua, BeanShell, et en prévision Ruby et Javascript (sisi).
Et tout ça sous Apache Public Licence.
Je plonge là-dedans dès que possible !
Edit : [...]
|
||
| [carlchenet] RMLL 2009 et retour sur Pycon FR ... | 08/06/2009 |
|
|
Comme indiqué ci-dessus, je serai aux Rencontres Mondiales du Logiciel Libre (RMLL) à Nantes, le 9 juillet 2009 pour une conférence sous la forme d’un retour d’expérience sur mon projet Bélier, avec une large part accordée à la démarche qualité dans le développement d’un logiciel en Python. Sera également abordé l’importance de l’empaquetage qui me [...]
|
||
| [carlchenet] Pycallgraph ... | 06/06/2009 |
|
|
J’ai récemment adopté le paquet Debian du programme Pycallgraph. Excellente raison pour vous présenter rapidement ce programme.
Pycallgraph vous permet de générer une représentation graphique des appels aux différentes fonctions qui composent votre programme Python. Vous pouvez ainsi détecter une anomalie ou comprendre pourquoi votre programme n’est pas performant lors de son exécution.
Un exemple avec mon [...]
|
||
| [Ohan] PyCON.fr, excellent! ... | 05/06/2009 |
|
|
Et voilà, l’édition 2009 de PyCON.fr, ma toute première conférence sur Python (et ma toute première conférence en tant qu’orateur!) est terminée.
Je tiens à remercier l’AFPY, Association Francophone PYthon, organisatrice de cet évènement. Je remercie aussi tous les membres de l’association, et bénévoles, qui m’ont accueilli aussi chaleureusement!
Je remercie Ubicast qui m’a permis d’avoir ma [...]
|
||
| [Afpy] AFPyro, le retour AFPyro du 25 juin 2009... | 02/06/2009 |
|
|
AFPyro du 25 juin 2009
|
||
| [nsteinmetz] Compte Rendu Pycon-FR 2009 ... | 01/06/2009 |
|
|
Je me suis rendu cette année à la 1ère matinée de Pycon-FR ou j'ai pu revoir David et Samuel Martin notamment (et pour ce dernier, de récupérer un linutop 1ère génération en échange de mon reste de tour...) Ci-après mes notes sur les confs auxquelles j'ai pu assister et mon avis sur l'événement en toute fin. Les slides sont disponibles en ligne et les vidéos devraient arriver prochainement. Comment python va dominer le monde ?Sur le constat du manque de visibilité de python / php, java, ruby, 3 axes de travail :
Correction d'un bug et naissance d'une nouvelle fonctionnalité dans CPython
PyQuery - Manipuler du html/xml à la jQuery en python
Skinner vos applications web avec Deliverance
Bases de données Non SQL
Bilan des coursesMis à part le parking de la Vilette que j'ai eu un peu de mal à trouver à cause des travaux (la Vilette m'avait prévenu, j'ai été enchanté par cette matinée et bien frustré de ne pas avoir pu y assister davantage. J'aurais bien aimé voir notamment les confs sur django, atomisator, twisted et couchdbkit. La grande hétérogénéité des sujets permet de voir plein de choses différentes, même si on n'y a pas un intérêt direct dans l'histoire. C'est toujours instructif. Coté organisation, rien à redire, c'était nickel pour ce que j'en ai vu. J'ai (enfin) payé ma cotisation de membre et fait le plein de t-shirts, sans oublier un petit badge Autre conclusion plus personnelle, il faut vraiment que je me pousse aux fesses pour assister à plus d'événements de ce type et ne pas me laisser faire par de fausses bonnes / mauvaises raisons. C'est vrai que de ma "campagne", j'ai pas toujours le courage de me rendre à l'autre bout de Paris... Vivement l'année prochaine donc et à plus court terme que les vidéos soient en ligne que je puisse visualiser ce que j'ai manquer...
Related
|
||
| [tarek] Smoke testing in Distutils I am not really sure smoke testing is the best name to describe what I am trying to set up. Wikipedia says: In compu... | 28/05/2009 |
|
|
I am not really sure smoke testing is the best name to describe what I am trying to set up.
Wikipedia says:
In computer programming and software testing, smoke testing is a preliminary to further testing, which should reveal simple failures severe enough to reject a prospective software release. In this case, the smoke is metaphorical.
But I [...]
|
||
| [Biologeek] ★ Django-ROA, pour une architecture orientée ressources ... | 25/05/2009 |
|
|
Il y a un projet sur lequel je travaille depuis un moment maintenant dans le cadre de mes prestations et que j'ai décidé de libérer (sous licence BSD) car je pense qu'il peut être utile à pas mal de monde : Django-ROA. Qu'est-ce que ça fait ?Il s'agit de pouvoir gérer ses ressources distantes normalement accessibles en REST directement via l'ORM et les modèles de Django. Le module va s'occuper (comme le montre le merveilleux schéma ci-dessous) de convertir la requête Django initiale en une requête HTTP et de convertir/déserializer la réponse en un objet Django :
Ok pour le fonctionnement mais qu'en est-il des applications ? Le module a originellement été développé pour s'intégrer dans les architectures orientées services (SOA) ayant une contrainte REST (d'où le ROA). Cela signifie que vous pouvez brancher votre application sur une base de données métier sous réserve qu'elle ait une interface HTTP. Ce qui ouvre la porte aux bases non supportées par Django nativement, aux entrepôts de données et aux multi-databases puisque vous pouvez spécifier une URI par modèle... Soyons encore plus fous, CouchDB parle le HTTP, et bien il suffirait d'un connecteur approprié pour pouvoir accéder aux documents via des modèles Django ! Lors d'EuroDjangoCon, Jesper venait de sortir django-piston (qui est utilisé pour les tests de django-roa) et faisait des tests d'application sur Pinax. J'ai pu vérifier en communiquant avec l'API mise en place sur sa machine que je pouvais éditer des objets Pinax via une interface d'administration de Django qui était lancée sur ma machine. Ce qui signifie que l'on pourrait imaginer une interface d'administration commune à plusieurs projets (pas forcément Django) présentant des API. Si vous avez d'autres idées d'applications, n'hésitez pas à laisser libre cours à votre imagination. Je n'ai pas parlé de RDF mais vous pensez bien que ce module est une partie intégrante de ce que j'ai appelé architecture moderne et agile ;-). Comment l'utiliser ?Je ne vais pas reproduire la doc ici mais c'est relativement simple, il suffit d'hériter du Model de django-roa et de définir l'URL de la ressource avec la méthode get_resource_url_list. Après, il y a beaucoup de settings et méthodes pour configurer tout ça, le plus intéressant pour découvrir le module est probablement ROA_MODELS qui permet de passer facilement d'une architecture locale (pour développer) à une architecture orientée ressources (pour tester grandeur nature). Sinon la lecture des tests peut être d'une grande aide. Notez qu'il est nécessaire de patcher Django (du moins pour l'instant) avec le patch lié au ticket #10109 pour pouvoir utiliser le module avec les relations ManyToMany. Comment participer ?En testant le module dans un premier temps, en enrichissant la documentation au besoin (je peux facilement vous laisser des droits si vous avez un compte BitBucket), en proposant des patchs ou tout simplement en discutant des concepts. J'aurais le plaisir d'en présenter brièvement les détails lors de Pycon-fr (dimanche après-midi) où j'espère vous retrouver nombreux. Il y aura aussi un atelier Django le samedi après-midi pour ceux et celles qui voudraient s'y mettre !
Related
|
||
| [Ohan] PyCon.fr: venez m’y voir! ... | 23/05/2009 |
|
|
Toi, oui toi lecteur,
sache qu’il y a une conférence sur Python, entièrement gratuite, qui se tiendra le 30 et 31 mai (autant dire, le week-end prochain) sur Paris, à la Cité des Sciences et de l’Industrie de la Villette.
Tarek Ziadé, le président de l’association AFPY, donne un peu plus de précisions sur cet évènement.
Et enfin [...]
|
||
| [carlchenet] Bélier 0.8 ... | 22/05/2009 |
|
|
La nouvelle version de mon programme Bélier est disponible depuis hier sur http://www.ohmytux.com/belier et sur mentors.debian.net Je recherche donc un sponsor.
http://mentors.debian.net/debian/pool/main/b/belier
http://mentors.debian.net/debian/pool/main/b/belier/belier_0.8-1.dsc
Bélier permet l’ouverture automatisée d’un terminal ou l’exécution de commandes sur un ordinateur distant via une connexion ssh. L’intérêt principal de Bélier réside dans sa capacité à traverser plusieurs machines intermédiaires avant d’accomplir [...]
|
||
| [tarek] Monitoring a Zope 2 application We have a simple need for a customer project that runs a Zeo server and a few Zeo clients : being able to check... | 19/05/2009 |
|
|
We have a simple need for a customer project that runs a Zeo server and a few Zeo clients : being able to check the status of every Zeo client, and monitor what they are doing.
DeadlockDebugger almost provides this feature since it is able to produce a dump of the execution stack for every thread [...]
|
||
| [nsteinmetz] Pycon FR 2009 - Le programme est disponible ! ... | 13/05/2009 |
|
|
L'AFPy (Association Francophone Python - http://www.afpy.org/ ) organise le week-end du 30/31 mai à la Vilette la 3ème version de Pycon FR (aka Conférence Python, version française). Le programme varié et riche est disponible ici : http://pycon.fr/sessions - Il me reste encore à affiner mon programme de la journée entre les différentes conf Pour ma part, j'y serais à coup sûr le samedi et de façon peu probable le dimanche - au plaisir de vous y retrouver |
||
| [Afpy] Pycon FR ... | 11/05/2009 |
|
|
Pycon FR se déroulera les 30 et 31 mai 2009 à la Cyberbase de la Villette à Paris
|
||
| [tarek] Distutils state Since Pycon, a lot of discussion and work has been going on. During the summit, we made a few decisions (see http://mail.python... | 10/05/2009 |
|
|
Since Pycon, a lot of discussion and work has been going on.
During the summit, we made a few decisions (see http://mail.python.org/pipermail/python-dev/2009-March/087834.html) but this topic is so wide and so complex that a lot of discussion still needs to be done to have a clear and complete picture of where we want to go and how [...]
|
||
| [tarek] Gsoc : Keyring library work started ! I am very proud to be a Gsoc mentor this year on a very interesting topic : an universal keyring library ... | 03/05/2009 |
|
|
I am very proud to be a Gsoc mentor this year on a very interesting topic : an universal keyring library for Python.
About the topic
In Distutils, if you want to interact with PyPI, you have to register in the website and you get a login/password so you can register and/or upload your packages.
Before Python 2.6, [...]
|
||
| [gawel] collective.releaser rocks ! ... | 02/05/2009 |
|
|
Tarek have made some great works on collective.releaser and collective.dist the last months. There is currently a refactor branch. The goal of collective.releaser is to normalize the release process of a buildout based project. I've worked on it the last week to implement the latest needed steps to allow an easy way to release a buildout project. So here is how it works. collective.releaser came with a paster template to generate a buildout skel. You got a dev.cfg for development with a develop option with all your develop eggs in it and a prod.cfg for production without develop and all versions fixed in the versions section. I've modified the project_release so you just need to run: $ bin/project_release --version=1.0
This will release eggs founded in the dev.cfg's develop option on a pypi server and fix the versions in buildout.cfg. If no version is founded for an egg in the versions section of the prod.cfg then the egg is released at the version passed to the command line. If a version is founded then the egg is released at this version. Here is an example: The dev.cfg: [buildout]
parts = eggs
develop =
../collective.releaser
../my.project
[eggs]
recipe = zc.recipe.egg
eggs =
collective.releaser
my.project
The prod.cfg: [buildout]
parts = eggs
versions = versions
[versions]
collective.releaser=0.6.1
[eggs]
recipe = zc.recipe.egg
eggs =
collective.releaser
my.project
collective.releaser package is already at 0.6.1 so no release is needed. my.project as no versions specified so a new 1.0 release is generated and uploaded on your pypi server. The generated buildout.cfg will look like this: [buildout]
extends = prod.cfg
versions = versions
[versions]
collective.releaser=0.6.1
my.project=1.0
After all eggs are released, project_release will generate a tarball with the tagged version of the project and all eggs founded in the develop option. Then to upgrade your project you just need to untar the archive on your production server. Launch bin/buildout. And that's it. This will probably make life easier for developers ! Hope we can make a new self generated release soon :) |
||
| [QuiSaura] Zope 3 et le Catalogue Zorro est arriv Ssans se presser Le grand Zorro, le beau Zorro Avec son cheval et son grand chapeau Mais je suis ... | 02/05/2009 |
|
|
Zorro est arrivé Mais je suis quand même un peu meilleur que Zorro. Ça sert à quoi un catalogue ? Et du coup, il gagne plein de temps.
interfaces.py : from zope.app.component.interfaces import IPossibleSite
Modeles/Racine.py : #-*- coding:Utf-8 -*- Modeles/Ecole.py : #-*- coding:Utf-8 -*-
Bon maintenant il nous faut rajouter une ligne dans le configure.zcml principal : <subscriber handler=".creationSite.creationSite" />
Et voici creationSite.py : #-*- coding:Utf-8 -*-
Maintenant, on ajoute un index dans notre catalogue :
Comment on indexe un attribut d'un objet ? from zope.app.catalog.interfaces import ICatalog
On commence par récupérer nos deux utilitaires via queryUtility(). Comment on recherche dans le catalogue? from zope.component import queryUtility
J'ai fait ce billet très rapidement, alors si ya des ratages, des questions, n'hésitez pas (enfin faut pas que la question soit trop poussée non plus hein ) |
||
| [tarek] Basic plugin system using ABCs and the “extensions” package I need a very simple plugin system for one of my projects. The project is a small W... | 01/05/2009 |
|
|
I need a very simple plugin system for one of my projects. The project is a small WSGI application called mysysadmin that allows you to launch some commands on your system to manage some applications. It also allows you to view log files in your web browser.
It’s similar in some ways to WebMin,
So in my [...]
|
||
| [fantomas] Paye ta Fabric ! ... | 01/05/2009 |
|
|
Imaginons que j'utilise un serveur de version, du genre Subversion ou Mercurial et que j'utilise un ou deux serveurs (test, production 1, production 2, ...) pour héberger mon ou mes applications. Le déroulement est le suivant :
Vous me direz que cela n'est pas forcément très long, mais quand vous devez le faire souvent et plusieurs fois par jour, on en a vite pleins le dos et cela est source d'erreur. Heureusement l'informatique étant un sport où celui qui est le plus fainéant gagne, il existe un solution pour se simplifier ces tâches de déploiements à distance. Son nom ? Fabric En quelques lignes de Python, définissant des règles, un peu à la manière d'un Makefile, il est possible d'automatiser ce genre d'opération. Voici un exemple basique pour le déployement d'un projet Django avec Mercurial : """Fabric Rules for MyProject""" Un des avantages principaux de Fabric est qu'il est possible de l'utiliser sur plusieurs serveurs en même temps, avec des règles spécifiques. On lance Fabric, et on peut aller prendre un café. Pour information Fabric est basé sur Capistrano, le même principe mais en Ruby. Un must, à tester absolument. Edit : le site du projet Fabric |
||
| [Afpy] Pilot Systems soutient le Logiciel Libre au Kosovo ... | 01/05/2009 |
|
|
La Software Freedom Conference Kosova est un événement annuel qui vient d'être créé pour réunir des développeurs locaux et une communauté internationale à Pristina, au Kosovo du 28 au 30 août 2009. Afin de soutenir cette initiative, Pilot Systems devient sponsor de l'événement et vous invite vous aussi à proposer des conférences.
|
||
| [tarek] URLs in books I received some complaints about the fact that some links in my books were dead by the time they were printed. For the next book ... | 19/04/2009 |
|
|
I received some complaints about the fact that some links in my books were dead by the time they were printed.
For the next book I am working on, I have proposed to my editor to set up a website to keep track of all references mentioned.
By using unique short ascii references throughout the book, it’s [...]
|
||
| [Afpy] Pilot Systems organise le World Plone Day 2009 à Paris ... | 16/04/2009 |
|
|
Pilot Systems organise le World Plone Day 2009 le 22 avril à La Cantine, à Paris. Cet événement international rassemble plus de 35 localités dans le monde entier, en organisant des conférences, ateliers et autres présentations autour de Plone.
|
||
| [fantomas] Stop aux spams sur django.contrib.comments ... | 15/04/2009 |
|
|
L'application comments contient par défauts plusieurs sécurités pour éviter le spamming, comme un honeypot et la vérification du temps de saisie du commentaires. Malgré cela les équipes de spammer sont très réactives, et coder un bot spécifique pour les sites django utilisant ce système de commentaires, rend tous ces sites vulnérables. En parallèle de cela, dans la version 1.1b de Django, l'application comments acquiert une nouvelle fonctionnalité, qu'est la modération automatique. L'envois de mails en cas de commentaires, et aussi prise en charge. J'en ai donc profité pour développer une protection contre le spam plus efficace basée sur Akismet à partir de cette nouvelle fonctionnalité. """Moderator of Entry comments Il suffit juste d'installer le module Akismet pour Python, et cela devrais fonctionner en définissant sa clef d'API Akismet. Bon par contre, on remarque de suite qu'il est dommage de devoir écrire une nouvelle classe Moderator, pour pouvoir récupérer et passer le context, c'est peu pratique en effet, surtout que comments peux le gérer par défaut avec le signal comment_will_be_posted. Mais à priori cela risque de changer si on en regarde le ticket suivant, prévu pour la version finale de Django 1.1 : Ticket 10878, projet Django Donc une réécriture du code sera certainement nécessaire à la sortie de cette version, qui commence à se faire attendre.... Pour plus d'informations : Documentation sur la modération |
||
| [tarek] new blog location, new design, update your bookmarks I was thinking about doing this change for a while, and I took the time to do it last week... | 15/04/2009 |
|
|
I was thinking about doing this change for a while, and I took the time to do it last week-end:
My personal website at http://ziade.org is now powered by Pylons and Atomisator. It’s both in French and English (the urls are translated too).
It contains:
a home page with my latest twitter entries
a blog (this one)
some other pages [...]
|
||
| [tarek] Distutils: introducing the check command (reStructuredText con... I am introducing the check command in Distutils. This command will check your... | 10/04/2009 |
|
|
I am introducing the check command in Distutils. This command will check your package metadata, like the sdist and the register command already do (they display warnings).
But the new thing is that it will also allow you to check if long_description is reStructuredText compliant.
Its usage will be:
$ python setup.py check --restructuredtext
running check
warning: check: Title underline [...]
|
||
| [ccomb] Tux et Python en 3d-Relief pour le stand AFPY ... | 31/03/2009 |
|
|
Si vous êtes passé au Salon Linux et OpenSource cette année et si vous avez eu la bonne idée de marcher jusqu'au fond à gauche du hall, vous n'aurez certainement pas raté le stand AFPY. J'ai eu la chance de pouvoir emmener un écran 3D-Relief sans lunettes, 24 pouces, de marque Alioscopy, prêté par la société Relief.fr. Pour l'occasion, j'ai effectué une journée de prise de vue en studio avec deux célèbres peluches, Tux et Alain. Tux, tout le monde connait, c'est le pingouin de Linux. Mais si vous ne connaissez pas Alain, il s'agit de la mascotte de l'AFPY, un Python en peluche ramené des JDLL 2008. ![]() Cette technologie est extraordinaire pour attirer l'attention des visiteurs. Les gens étaient subjugués par l'effet de Relief et la majorité n'avait jamais vu ça. Il y avait un attroupement permanent devant le stand et j'ai passé les trois jours à expliquer comment les écrans fonctionnent. Tout le monde a déjà vu des images en relief, ça fait au moins 200 ans que ça existe (bien avant la photographie). Mais du relief sans lunettes sur un écran LCD, ça paraît surnaturel. J'aurais vraiment du préparer un petit papier explicatif à distribuer... Pour rappel, le principe est entièrement passif, il s'agit d'une dalle en verre composée d'un réseau très complexe de microlentilles qui permettent de restituer 8 images selon 8 angles différents. Derrière le réseau, les 8 images d'origine sont recomposées en une seule (une sorte de multiplexage), en voici un aperçu grossi 4 fois: ![]() Cela dit l'écran ne fait pas tout, il faut maîtriser la fabrication d'images sur 8 points de vue. Ici c'est plus que de la stéréoscopie classique à deux images : il y a 8 images ! Du coup le travail de post-prod est plus important et plus complexe, il faut choisir la bonne base, collimater au bon endroit, travailler la lumière, s'assurer que le jaillissement et la profondeur sont correctement proportionnés et positionnés par rapport au cadre de l'écran, etc. Il faut aussi créer un décor. Pour cette fois j'avoue que je me suis pas foulé. Ces photos correspondent à une des photos de la série des 8 points de vue. Bien entendu le Relief n'apparaît pas sur votre écran, mais je me suis quand-même amusé avec le GIMP à reconstituer tout en bas de l'article une image en stéréoscopie anaglyphique. Si vous avez des lunettes rouge et bleue vous pourrez avoir un aperçu de ce que les visiteurs du Salon ont pu voir. Un aperçu seulement, car sur écran Alioscopy, vous pouvez légèrement tourner autour de l'objet en vous déplaçant. En stéréoscopie classique c'est impossible. ![]() ![]() ![]() ![]() ![]() ![]() Mmmh, oui, Python donne des forces à votre Linux ;) ![]() Sur celle-ci le relief était exagéré. le jaillissement du Python atteignait quasiment 1m, et la tête est floue et trop sombre. En anaglypheLà il faut des lunettes rouge et bleu. Si vous n'en avez pas, vous pouvez toujours en commander ici. ![]() La création d'une image anaglyphique est un jeu d'enfant. Dans le GIMP (v2.4), vous ouvrez les deux images, puis menu Couleur -> Composants -> RVB en calque, puis vous intervertissez le rouge et le bleu, vous fusionnez les deux verts à 50%, et vous recomposez. C'est la technique la plus basique, on peut faire plus subtil. Le résultat est moyen car il y a des images fantômes, mais c'est fait en 2 minutes. En vision croiséeSans lunettes, en plaçant les images gauche et droite côte à côte puis en louchant pour aligner les deux images, vous pouvez voir le relief, et même mieux qu'avec les lunettes. C'est de la vision croisée, ça fait mal à la tête mais c'est paraît-il un excellent exercice de rééducation orthoptique. ![]() |
||
| [Ohan] Le contrôle de versions de sources: pourquoi? ... | 30/03/2009 |
|
|
Je vais vous raconter l’histoire de Brian. Brian est ingénieur informaticien.
Le crash disque
Brian n’a pas de chance, et il a failli devoir pointer à l’ANPE quand il s’est rendu compte que
Son disque dur avait crashé
Il n’avait pas fait de sauvegarde de son boulot
Heureusement, il a pu récuperer les sources sur le serveur de production, et [...]
|
||
| [Afpy] L'AFPY à Solutions Linux 2009 ... | 30/03/2009 |
|
|
L'AFPY est présente du 31 mars au 2 avril sur le stand VA55 du salon Solutions Linux à Paris, Porte de Versailles.
|
||
| [tarek] Pycon hallway session #2: thoughts for multiple versions in Py... We had an excellent brainstorming session today in the hall, with Toshio, Geo... | 30/03/2009 |
|
|
We had an excellent brainstorming session today in the hall, with Toshio, Georg, Martin, Thomas, etc.. (sorry we were so many I don’t have the full list) with some insights from Guido and Brett. We tried to think about a way to handle multiple versions of a same package.
Here’s the two most important concepts :
Unicity: [...]
|
||
| [tarek] Pycon hallway session #1: a keyring library for Python Before I sit down and clean up my summit notes to send them to python-dev, I wanted to p... | 27/03/2009 |
|
|
Before I sit down and clean up my summit notes to send them to python-dev, I wanted to post an entry about a small project which I think could be a great task for a student at the Summer of Code (I doubt it can fill 4 months of work but it could be done [...]
|
||
| [Biologeek] Réflexions sur les conférences de geeks ... | 27/03/2009 |
|
|
Ah le printemps, période de sortie des geeks pour aller à leurs rendez-vous préférés : se retrouver entre eux pour discuter technique de vive voix. Après avoir assisté à pas mal de confs de geeks (et parfois participé), je me suis enfin décidé à écrire quelques idées à ce sujet. Proposition et préparationIl y a deux moments importants lorsque vous choisissez de participer :
Le contenu fait partie de vous, de votre expérience, de votre passion. C'est de l'acquis et il va donc falloir faire un effort de concision et de pertinence. C'est difficile mais nécessaire. Normalement au moment où vous faites votre proposition c'est déjà bouclé (d'où le travail en amont et le secret espoir qu'il n'ait pas été inutile !), au moins dans les grandes lignes. Reste le format. Malheureusement, c'est souvent imposé et trop long. Il n'y a qu'à regarder TED qui est une référence en la matière : pas plus de 20 minutes. C'est le seul moyen de garder l'attention du public et d'être pertinent. Au-delà ça devient un tutoriel avec des lignes de codes ou alors ça part dans des explications trop avancées pour la moitié de la salle. J'ai fait ces erreurs, et je ne les souhaite à personne ;-). D'une manière plus générale, trop peu de temps est alloué aux "entractes" qui sont aussi importantes et intéressantes que les conférences elles-mêmes. C'est bien dommage. Les barcamps évitent cela mais il serait peut-être intéressant de trouver un juste milieu. Le Lift Marseille a l'air d'éviter ça d'après le programme. Pour ce qui est de la préparation, je suis persuadé qu'il est important d'essayer de faire une pré-présentation mais pour cela il faut un auditoire pertinent (sinon je n'y arrive vraiment pas), et ça c'est malheureusement très difficile à trouver... Interactivité et discussionsBeaucoup ont été surpris de me voir me ruer sur twitter à la fin de mon intervention lors de Paris Web. Je n'en ai pas reparlé mais à la base je voulais afficher les résultats de la recherche pendant les questions pour pouvoir interagir directement avec les plus timides. À la réflexion, j'aurais aimé avoir le fil des commentaires en live pendant mon intervention aussi. Je pense à twitter mais un simple curseur (anonyme) permettant de voir si on arrive à transmettre le bon message serait vraiment utile. Ça permettrait de mettre en confiance ou de redresser la barre si nécessaire. Voire d'arrêter si l'on se rend compte que l'on ne s'adresse pas au bon public. Un autre point qui est toujours assez délicat lors d'une intervention c'est le passage aux questions. Impossible de savoir s'il va y en avoir trop, pas assez, pas du tout, il manque ici aussi un outil permettant de faire remonter les questions pertinentes et d'estimer avant la fin s'il faut consacrer une large part aux questions ou pas. Est-ce que ces outils seraient sources de distraction ? Bien entendu mais bon, lors d'une conf de geek la moitié de l'audience a déjà un laptop sur les genoux et l'autre prend des photos en tweetant de son téléphone donc bon :-). Si la conférence permet de donner une première approche sur un sujet, il serait très intéressant que la discussion se poursuive. Bien sûr il y a les questions personnelles à la fin mais ça ne concerne qu'une poignée de personnes alors qu'il y aurait matière à discuter entre tous les auditeurs autour de la problématique abordée. Quels moyens proposer pour poursuive la discussion ? Partage et expérienceQu'est-ce qui fait préférer une conférence plutôt qu'un livre ou un article sur le net ? Au-delà du charisme, c'est l'expérience de l'orateur qu'il vient partager. Je me fous de savoir qu'il faut lancer telle et telle commande pour arriver à ça. En revanche si l'auteur a eu ce problème et l'a résolu après avoir tenté ça puis ça, là ça m'intéresse. Un public a besoin qu'on lui raconte une histoire, toujours. Seth Godin définit deux éléments permettant d'être un bon orateur :
C'est exactement ça. En bonus, quelques conseils pertinents et pleins de bon sens. Mise en applicationJ'aurais la chance de pouvoir mettre en pratique au moins une partie de ces conseils lors d'EuroDjangoCon à Prague du 4 au 8 mai puisque j'y organise un panel autour d'Open Stack et de ses implémentations dans Django. Ça sera une première pour moi de m'exprimer en anglais et ça va être difficile car j'ai un niveau vraiment moyen mais il faut de toute façon que je m'y mette sérieusement car ça me frustre souvent. J'ai aussi soumis pas mal de propositions pour Pyconfr qui se tiendra les 30-31 mai et je me réjouis de voir qu'une partie de ces réflexions sur lesquelles je cogite depuis un moment ont été mises en pratique via les choix de formats et les durées proposées par les organisateurs. Au plaisir de vous y retrouver. :-)
Related
|
||
| [QuiSaura] Intro à Plone 3 : partie 3 Troisi me partie de l'intro Plone 3 . Mieux vaut tard que jamais. Dans cette partie on va : - configurer ... | 26/03/2009 |
|
|
Troisième partie de l'intro à Plone 3 . Mieux vaut tard que jamais. Dans cette partie on va : - configurer le fichier content/configure.zcml
Une petite mise en boucheDans content/configure.zcml on va définir les permissions sur nos classes : <configure
Voilà, voilà c'est terminé pour le dossier content. Maintenant il faut l'inclure dans jesuisunconnard.metier , pour cela il suffit de rajouter une ligne dans le configure.zcml principal (jesuisunconnard.metier/jesuisunconnard/metier/configure.zcml) ; ce qui donne : <configure
Le plat de résistanceSouvenez-vous, dans la partie 2, on déclarait un type pour chacune de nos 2 classes. On va devoir créer nos fichiers .xml dans un profil. <configure
$ cd jesuisunconnard.metier/jesuisunconnard/metier/ && mkdir -p profiles/default Je ne ré-explique pas à quoi ca sert un profil, cf partie 1.
<object name="portal_types" meta_type="Plone Types Tool">
<object name="DossierHistoire" meta_type="Factory-based Type Information with dynamic views"/> <object name="Histoire" meta_type="Factory-based Type Information with dynamic views"/> </object>
À présent on va les définir ; pour ce faire, dans le dossier default on crée le dossier types . Voici DossierHistoire.xml : <?xml version="1.0"?>
ligne 2 : le nom de notre objet : le même que celui écrit dans types.xml . Voilà,je suis conscient que les explications doivent être assez pourries pour ces 44 lignes mais j'aime le chocolat. <?xml version="1.0"?>
|
||
| [glooze] Une communauté python accueillante ! ... | 16/03/2009 |
|
|
Après avoir été guidé dans l’apprentissage par quelques amis (apprentissage qui ne fut pas vraiment long, le plus long sera d’apprendre les petites spécificités et particularités du langage), avoir trouvé des gens sympathiques sur le salon de discussion #afpy sur le serveur irc.freenode.net, me voilà sur le planet de l’afpy !
Donc bonjour à tous ceux [...]
|
||
| [Ohan] Django, sqlite et mod_wsgi, attention au piège! ... | 14/03/2009 |
|
|
Tout d’abord, je tiens à préciser que le problème qui suit n’est pas limité à l’utilisation de django ou de mod_wsgi.
Le contexte
Utilisation de SQLite pour un projet django déployé sur mod_wsgi:
# settings.py
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = '/opt/mysite/mysite.db'
Et voici les permissions sur le système de fichier:
-rw-rw-rw- 1 ohan ohan 29696 2009-03-14 13:30 mysite.db
Tous les répertoires parents sont [...]
|
||
| [ccomb] Votre blog sur le Planet de l'AFPY ... | 14/03/2009 |
|
|
Pour rappel, l'AFPY possède un flux RSS avec des nouvelles fraîches parlant de Python. L'adresse du flux est ici : http://www.afpy.org/planet/rss.xml Un Planet nommé Yap fabriqué avec Pylons présente ce flux sur le site de l'AFPY : Le flux lui-même est créé grâce à Atomisator, le framework d'agrégation web de Tarek, à partir d'une liste de sources prédéfinie. Si vous possédez un blog parlant de Python, ou qui peut être filtré par Tag, Catégorie ou Recherche sur Python, vous pouvez m'envoyer l'adresse et je l'ajouterai à la liste. |
||
| [glooze] Dis papa, comment t’es devenu un monsieur qui a une peluche d... ... | 13/03/2009 |
|
|
Et si aujourd’hui en ce vendredi ensoleillé, je vous racontais ma vie et pourquoi/comment je suis devenu développeur avec PHP ? J’ai pas d’enfant, mais un jour, il me posera quand même peut-être cette question, si on suppose qu’entre temps j’ai acheté les peluches des mascottes de mes langages préférés…
Les débuts plutôt basiques …
TI-83. Obtenue [...]
|
||
| [glooze] Dans la série “Glooze découvre Python …” ... | 13/03/2009 |
|
|
... je demande “Les paramètres nommés“.
Moi, quand même, ça me bluffe comment il est bourré de petites choses sympa et puissantes, ce langage. Les paramètres optionnels, c’est courant dans plein de langages, mais les paramètres nommés nettement moins…
|
||
| [Biologeek] L'élitisme de la curiosité ... | 12/03/2009 |
|
|
J'ai comme prévu fait une rapide description des avantages de Django à La Cantine (oui ce billet date un peu...) et je ne compte pas faire un résumé de ce qui a été dit. Je souhaiterais en revanche revenir sur une question concernant l'élitisme de Python ou Ruby face à PHP car c'est vraiment dommage que ce soit ressenti comme tel par les développeurs PHP. Ces langages sont accessibles, il ne faut pas une semaine pour faire son premier programme mais une après-midi, il suffit juste d'être motivé pour essayer et pouvoir en juger par soi-même. Il y a énormément de support derrière (listes de diffusion, salons irc, tutoriels, blogs, etc) donc ce n'est finalement qu'un problème de « barrière psychologique » qui peut venir : D'une peur de l'inconnuOu peut-être plus surestimation finalement. Il ne faut pas croire que certains langages sont réservés à certaines personnes ultra-compétentes, c'est faux. Le plus marrant c'est qu'il s'agit du contraire avec ces langages car ils permettent de créer ses premières applications très rapidement, sans avoir besoin de connaître toutes les fonctions/modules de la bibliothèque standard. Pour reprendre un témoignage récent :
Il faut aller au-delà de cette peur, prendre le temps d'essayer et de juger si ça vaut l'investissement en temps que vous allez y consacrer. C'est un risque mais... une vie sans risque doit être bien ennuyeuse ! :-) D'un manque de confiance en soiSuivre un tutoriel d'apprentissage est rapide et facile. C'est lorsqu'il faut aller plus loin que ça prend du temps (j'apprends encore de nouvelles choses sur Django et Python quasi-quotidiennement), mais si un simple tutoriel vous permet d'apercevoir les fondements du langage et s'il va vous plaire ou pas. Ces tutoriels ne sont pas réservés à une élite ! Après il faut aussi accepter de repartir, non pas de rien (si vous connaissez Symfony par exemple, essayer/adopter Django sera très simple) mais forcément apprendre de nouvelles méthodes, de nouvelles façons d'envisager certains problèmes. Accepter de redevenir débutant fait du bien mais demande une bonne part de confiance en soi, en sa capacité d'adaptation. D'un manque de curiositéIl est bien sûr plus simple de rester dans son petit confort mais c'est peut-être ce qui me déprime le plus, penser qu'il y a des développeurs qui vont utiliser pendant 10 ans une même techno, sans essayer autre chose alors que l'on fait un métier qui permet de ne jamais s'ennuyer grâce à son évolution constante. Je commence à bien connaître Python et je n'en deviens pas monomaniaque pour autant, je suis conscient de ses limites et j'explore d'autres pistes qui pourraient y pallier. Bien sûr ça demande un certain effort mais je considère que ça fait partie de ma veille technologique quotidienne. Pour revenir à l'événement, mon but n'était pas de convaincre tout le monde de passer à Django mais juste d'attiser la curiosité de certains (ce qui aura au moins marché pour une personne \o/). En guise de conclusion, j'ai écrit un article pour Linux Magazine qui devrait être dans vos kiosques et qui permet de débuter avec Django en prenant l'exemple de développement d'un blog (très proche de celui de Gilles). L'avantage c'est qu'il s'agit aussi d'une comparaison avec d'autres frameworks web Python vous permettant de choisir en fonction de vos besoins. Si votre curiosité vous démange ;-).
Related
|
||
| [gfabio] Why Django does not want my static files? By default, Django does not serve media (static files). It leaves that job to Web server. So if you ... | 11/03/2009 |
|
|
By default, Django does not serve media (static files). It leaves that job to Web server. So if you add some CSS, JavaScript and images into your templates, nothing should appear, as ignored. In fact, Django supports static files but we must add support explicitly. Beware: only during development, never in production use for performance and security issues (there is a big and fat disclaimer in the related documentation). In your project's urls.py, add this urlpattern:
... YOUR URLS HERE ...
from django.conf import settings
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$',
'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
'show_indexes': True,
},
),
)
With this pattern, static files will be available at the URL: /media/. Don't forget to adjust settings.MEDIA_URL: MEDIA_URL = '/media/' And to avoid conflicts, we need to redefine settings.ADMIN_MEDIA_PREFIX: ADMIN_MEDIA_PREFIX = '%sadmin/' % MEDIA_URL When your project is ready for production use, you can define different settings.MEDIA_URL. For example, depending on settings.DEBUG:
if DEBUG:
MEDIA_URL = '/media/'
else:
MEDIA_URL = 'http://media.yourdomain.com/'
But you can define a DEVELOPMENT_MODE setting or anything else. Take a look at the djangoproject.com settings.py. It uses the platform.node() trick. Into your templates, it is recommended to use {{ MEDIA_URL }} instead of /media/:
<link rel="stylesheet" type="text/css" media="all" href="{{ MEDIA_URL }}css/main.css" />
Now if you modify settings.MEDIA_URL, you will not have to modify all your templates. Thanks to django.core.context_processors.media which adds media-related context variables to the context. This context processor is enabled by default. To know more about how Django serves static files: How to serve static files. |
||
| [fantomas] Un CMS en Django ? la suite ... | 10/03/2009 |
|
|
La dernière fois je vois ai parlé d'une des premières applications disponible en Django permettant d'intégrer un CMS dans son site, nommé Django-cms. Mais mon retour sur cette application m'avait laissé un petit goût de frustration, me laissant penser que ce n'étais pas encore au point. Mais cela va mieux avec Django-page-cms. Ce dernier en plus des fonctionnalités essentielles, comme la gestion de l'arborescence dans le module d'administration et la prise en charge de différents langages, possède certains atouts qui en font mon favoris. Voici les petits plus qui m'ont séduit :
De plus j'ai pu tester la rapidité de l'équipe du projet qui a intégré en moins de 12h ma contribution pour fixer un bug mineur. Un projet qui mérite donc d'être suivis. Le site de web de Django-pages-cms. Edit du 7 avril 2009 : une traduction en français est désormais disponible, ou ici. |
||
| [No] Bientôt PyRoom 0.4 ... | 05/03/2009 |
|
|
PyRoom 0.4 approche à grands pas, et apporte son lot de nouveautés qui risquent d'en faire une release majeure. Tout d'abord, la "boîte de texte" a été complètement revue, et grâce à la suppression d'une dépendance avec gtksourceview, on a rendu le programme plus facilement portable sur d'autres plateformes. D'autre part, il est intéressant de noter qu'on redemande aux traducteurs de tous poils de se remettre à l'ouvrage, afin de fournir des traductions pour PyRoom dans toutes les langues de la terre du monde. Avis aux amateurs. Avec Rosetta, il suffit d'un simple navigateur web et c'est joué. Je rappelle que les rapports de bug se feront via Launchpad, merci. Tiens ! En parlant de launchpad, d'ailleurs, j'ai eu le plaisir de voir un texte que j'avais adressé à sa demande à Matthew Revell débarquer sur le blog de Launchpad. Il m'avait simplement demandé pourquoi j'avais opté pour la plateforme Launchpad pour héberger PyRoom. Je ne pensais pas que ça en ferait un article... Et pour finir, cerise sur le gâteau, si on va fouiller dans les répertoires archives de vidéos du dernier Fosdem, on peut tomber sur la vidéo d'un type mal rasé, arborant un horrible accent outrageusement britannique et qui explique à un parterre assez dubitatif pourquoi PyRoom est un outil intéressant, bien que dépouillé au maximum. Le son crache, c'est horrible, mais c'est pas ma faute, désolé. |
||
| [nsteinmetz] deliciousbackup - Sauvegarder vos favoris delicious dans ... ... | 05/03/2009 |
|
|
Suite à la déconvenue du service Ma.gnolia, je me suis décidé à automatiser les sauvegardes de mes favoris delicious fait de temps à autre quand j'y pensais. Ce fut l'occasion pour jouer avec pydelicious et sqlite, le tout en Python bien sur pour se faire la main. Le stockage en base se fait de "deux façons" :
Ainsi, vous pouvez faire ce que bon vous semble avec vos backups ensuite... (perso, j'ai des objectifs de réutilisation de cette base à d'autres fins... Cela donne donc deliciousbackup. Très simple d'utilisation : après avoir configuré les variables USERNAME, PASSWORD et DBNAME, il vous suffit de faire : python deliciousbackup.py Il vous reste ensuite plus qu'à mettre cela dans une crontab par ex. Attention à ne pas lancer ce script trop souvent si vous ne voulez pas voir votre IP être bannie temporairement. Si vous voulez faire des tests, remplacez : posts = dlcs.posts_all() par : posts = dlcs.posts_recent(count='5') Je suis preneur de toute amélioration possible de mon script (sous licence BSD). |
||
| [Afpy] PyConFR (Rencontre Francophone Python) - 30 & 31 mai 2009 ... | 03/03/2009 |
|
|
Le 30 et 31 mai se déroulement pour la quatrième fois PyCon France, deux journées complètes sur le langage Python.
|
||













Le déploiement d'applications, c'est pas toujours facile et rébarbatif surtout quand on travaille sur un parc de machines.
Depuis quelques jours, les formulaires de commentaires fournis par l'application django.contrib.comments dans la distribution de Django, sont devenus vulnérables aux spams.











Ces derniers temps occupé par certains projets personnels, j'ai pu tester de nouveaux outils de développement. L'idée est d'en faire un retour et je vais commencer par la suite de mon dernier article.