Un Electron Libre...

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

mercredi 7 février 2007

Devez-vous innover ou vous contenter de suivre la tendance générale ?

Billet publié originellement sur le blog de Clever Age : Devez-vous innover ou vous contenter de suivre la tendance générale ?. Pour la petite histoire, ça m'a permis de gagner un Ipod Nano ;-)

Tel est le paradoxe quotidien de l’informatique (mais pas uniquement). A l’heure du web 2.0 subsistent des applications client/serveur et AS/400 à plus ou moins juste titre. Avec le web 2.0 est arrivé le buzz autour de la société 37signals et de ses applications Basecamp ou encore Ta-da list basé sur le framework Ruby on rails. A contrario, dans les grandes sociétés françaises et internationales, les seules technologies présentes sont J2EE, .Net et dans une moindre mesure PHP (ce dernier a su acquérir ses lettres de noblesse ces dernières années). En dehors de ces technologies, point de salut. Nous pourrions nous dire que toute société de services se doit alors de maîtriser ces technologies pour pouvoir accompagner des grands comptes dans leurs projets. Pour autant, ces mêmes sociétés de services doivent-elle se priver de ces nouveaux outils qui ont fait et font leurs preuves au jour le jour ?

Il y aura toujours des partisans du "ma société fera uniquement du Java/PHP/.Net". Ce positionnement peut paraître raisonnable et raisonné pour une société s’adressant à des grands comptes :

  • Les grands comptes lancent des projets quasi uniquement sur ces technologies,
  • les compétences python (utilisé dans les frameworks Django, Turbogears, etc) ou ruby (utilisé dans le framework Rails) sont assez peu présentes en France et lorsqu’elles existent, elles sont concentrées dans un petit nombre d’entreprises (dans le cas de python). Pour ruby, cela est encore plus vrai. Dès lors, il pourrait paraître risqué pour une entreprise de se lancer dans un projet utilisant un de ces deux langages.
  • Ce manque de compétences s’explique par un manque de formation à ces langages. Les technologies les plus demandées étant Java, PHP et .Net, les développeurs et les établissements de formation ont donc naturellement privilégié ces langages. Nous pourrions donc tout à fait voir des changements d’ici quelques années avec le succès actuel que connait ruby/rails notamment mais aussi python dans cette ère du web 2.0.
  • Le langage python a en outre été mis à mal lorsqu’un de ses promotteurs, Nuxeo, a finalement décidé de passer sa solution CPS sous Java en lieu et place de Python/Zope.

Pour autant, et sans pour autant céder aux sirènes du web 2.0 ou au coté "hype" de ces frameworks, je pense que toute société de services se doit d’évaluer ces frameworks et langages et le cas échéant investir dedans. Je ne dis pas pour autant qu’il faille abandonner des technologies comme Java, PHP ou .Net, loin de là. Ces nouveaux langages et frameworks peuvent répondre à certains besoins non couverts par les autres ou bien de façon plus rapide. Ce serait quand même bête de s’en priver, non ?

Dès lors, malgré ces faiblesses conjoncturelles (manque de compétences ruby / python), il peut être opportun pour une société de services d’investir dans ces langages. Il lui reste ensuite à adapter son langage commercial pour prendre en compte ces nouvelles possibilités. C’est à la société de services de bousculer alors un peu les choses et de convaincre son client (sous réserve que ce dernier n’ait pas de contraintes technologiques à respecter) que son projet peut tout à fait être fait avec ces nouveaux frameworks, non pas pour des raisons de mode mais parce que ceux-ci sont fiables, répondent totalement au besoin du client, permettent de réaliser le projet dans un délai plus réduit que tel autre framework Java/PHP/.Net, etc.

Si la société de services n’apporte pas l’innovation source de valeur pour son client, qui le fera ?

mardi 23 janvier 2007

Atome : pause et premiers résultats

Début de résultats sur ma petite pause dans la réalisation du projet Atome avec Django : J'ai cherché à jouer avec Symfony et non, décidément, je ne m'y fais pas.

J'ai reproduit le tutoriel en l'adaptant un peu pour être plus conforme au projet Atome et bof :

  • Je trouve que la documentation de Symfony est moins exhaustive que celle de Django. Suffit de voir la doc des modèles pour cela : Symfony model vs Django - model api
  • Pour produire un résultat équivalent ou presque, je dois écrire beaucoup plus de code coté symfony que du coté de django,
  • J'ai toujours autant de mal avec la syntaxe de PHP avec ces ::, ->, etc. La base de PHP en fait peut être un langage facile à prendre en main mais pour le moment, je trouve python plus simple :-)
  • Faut faire un nombre de commande considérable avant d'avoir qqc (symfony propel-build-model, symfony propel-build-sql, symfony propel-insert-sql, symfony propel-generate-crud). A contrario, cela donne peut être à Symfony plus de souplesse et lui permet peut être de construire une interface d'admin plus souple que celle fournit nativement dans Django (mais j'avoue ne pas avoir trop creuser ce point).

Donc après un rapide test, je mets Symfony de coté et je le laisse à mes camarades de bac à sable ;-) .

Reste rails, ce qui présuppose que j'achère la dernière version du bouquin, car contrairement à Django, il n'y a pas de véritable documentation en ligne (ou à toi cher lecteur de me montrer où elle est...)

Suite au prochain épisode !

dimanche 21 janvier 2007

En vrac CMS & Framework

vendredi 19 janvier 2007

Atome : petite pause

C'est encore la faute à Niko qui me demandait pourquoi je n'étais pas parti sur un framework PHP ou sur (Ruby on) Rails pour le projet Atome.

Mes raisons sont assez simples :

  • C'est en lisant "Apprendre à programmer en python" que j'ai découvert python et compris le fonctionnement de la programmation orienté objet et les notions de classes, méthodes, etc.
  • Python est un langage universel dans le sens où on peut aussi bien faire des scripts batch, que des applications graphiques ou du développement web (contrairement à PHP, même s'il y a un php-cli et php-gtk)
  • David m'avait bien vendu python lors d'échanges par mail,
  • le modèle objet de PHP reste obscure pour moi avec ces -> et ces $this

Maintenant que j'ai un début de blog qui tourne sous django (comprendre je peux créer/modifier/supprimer des billets, les assigner à des catégories et/ou tags, lister les catégories/tags et lister les billets d'une catégorie ou d'un tag), je me demande si je ne vais pas m'occtroyer une petite pause dans mon développement (pourtant, ce matin dans le train, je me suis noté 25 tâches à faire pour terminer ce projet ;-) ).

Cette pause consisterait à recréer ce que j'ai fait pour le moment sous Django sous d'autres frameworks pour voir ce que j'en pense en vrai :-)

La liste des prétendants pourrait être la suivante :

  • Framework PHP : Symfony, mais c'est peut être sortir un tank pour pas grand chose...
  • Framework Ruby : Rails

Brièvement, le projet Atome a pour objectif de permettre d'avoir en un seul et unique endroit, un espace "blog" et un espace "tutoriel" avec tout ce qui va bien (commentaire threadé, tags, catégories, flux rss/atom, trackbacks, pings, coloration syntaxique, éditeur riche (pas forcément wysiwyg...), urls propres, etc).

et toi cher lecteur, qu'en penses-tu de cette idée ? que ferais-tu à ma place ?

lundi 13 novembre 2006

Django : gestion des fichiers statiques - ex des feuilles de styles (css)

Django fournit un serveur web pour la partie développement. Dans ce cadre là (et ce cadre là uniquement ; comprendre qu'en prod, il faudra faire autrement), il faut indiquer à Django où sont vos fichiers statiques (images, feuilles de styles, etc) afin de les interpréter correctement.

Supposons que :

  • Vos projets django soient dans /home/django, vous avez donc /home/django/projet1 par ex.
  • Votre feuille de style style.css est stockée dans /home/django/projet1/site_media/css/

Alors, dans votre fichier /home/django/projet1/urls.py, il vous faut ajouter :

(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/home/django/projet1/site_media'}),

Ensuite, dans votre template, il vous suffira de mettre :

<link rel="stylesheet" href="/site_media/css/style.css" type="text/css" media="screen" />

Plus d'info sur : http://www.djangoproject.com/docume...

Si je continue ainsi, je vais être bon pour monter django-fr.org ;-)

mardi 31 octobre 2006

Gestion des urls dans django

Dans Django, il est possible de définir les urls à différents endroits :

  • au niveau du projet : dans monprojet/urls.py
  • au niveau de chaque application : dans monprojet/monapplication/urls.py

Solution 1 : vous stockez les urls au niveau du projet :

from django.conf.urls.defaults import *
 
urlpatterns = patterns('',
    (r'^admin/', include('django.contrib.admin.urls')),
    (r'^app/$', 'monprojet.monapplication.views.index'),
    (r'^app/page', 'monprojet.monapplication.views.page'),
)

Solution 2 : au niveau de chaque application :

Dans monprojet/urls.py :

from django.conf.urls.defaults import *
 
urlpatterns = patterns('',
    (r'^admin/', include('django.contrib.admin.urls')),
    (r'^app/', include('monprojet.monapplication.urls')),
)

et dans monprojet/monapplication/urls.py - attention à bien définir un chemin relatif (voir plus bas pour plus d'explications) :

from django.conf.urls.defaults import *
 
urlpatterns = patterns('',
    (r'^$', 'monprojet.monapplication.views.index'),
    (r'^page', 'monprojet.monapplication.views.page'),
)

Vous pouvez même simplifier ce dernier élément de la façon suivante :

from django.conf.urls.defaults import *
 
urlpatterns = patterns('monprojet.monapplication',
    (r'^$', 'views.index'),
    (r'^page', 'views.page'),
)

Pour le contenu de monprojet/monapplication/urls.py, attention à ne pas faire apparaître une deuxième fois le chemin, comme on pourrait le croire :

from django.conf.urls.defaults import *
 
urlpatterns = patterns('',
    (r'^app/$', 'monprojet.monapplication.views.index'),
    (r'^app/page', 'monprojet.monapplication.views.page'),
)

Faute de quoi, django vous renverra une erreur 404 si vous appelez http://www.domain.tld/app/ car il cherchera le motif http://www.domain.tld/app/app/. Le premier "app" est en fait déjà définit dans monprojet/urls.py et le second dans monprojet/monapplication/urls.py.

En savoir plus : http://www.djangoproject.com/documentation/url_dispatch/

samedi 14 octobre 2006

Créez en 2 coup de cuillère à pot la documentation de django au format HTML

David signlait dans mon billet post:330 que l'on pouvait créer un version html de la doc via docutils et plus précisément rst2html.

Dans la série "je suis un grand fainéant", je me suis dit que ce serait bien d'avoir toute la doc au format html et je ne me voyais pas faire pour tous les fichiers :

geshi bash
rst2html document.txt document.html

J'ai donc créé autodoc qui :

  • Récupère la dernière version de la documentation de django sur le svn
  • Génère la version HTML des documents

C'est mon premier script python, donc un peu d'indulgence et je suis ouvert à toutes vos remarques / suggestions / commentaires :-)

Edit : 1ère amélioration, j'ai réussi à remplacer l'appel système à subversion par le binding python/subversion pysvn. Vais essayer de faire de même pour docutils mais j'avoue ne pas trop comprendre comment fonctionne ce module... :-/

Edit 2 : c'est fait - les appels systèmes ont disparu de mon code au profit des librairies python ;-)

jeudi 5 octobre 2006

Accéder à la documentation de django...

Ce jour, dans le RER, en attendant mon train, j'étais en train de continuer ma découverte du framewok Django. Je me disais "quel dommage de pas avoir de connexion internet, je n'ai aucune doc et c'est donc dur de pouvoir avancer sur la découverte de django..." A ce moment là un lien "Documentation" dans l'admin attire mon oeil. Je clique dessus et là : rien car il me manque le paquet docutils comme la page l'indique si bien.

En revenant chez moi, je m'empresse donc de faire :

geshi bash
sudo apt-get install python-docutils

Je relance webrick et me rend sur la page http://localhost:8000/admin/doc/ et là : que du bonheur !

Vous accédez à la doc de django (tag, filtes, vues, etc), ainsi qu'à une vision de vos modèles. Vous voyez ainsi tous vos modèles avec une description du type que vous avez défini. Cette représentation tient même compte des clés étrangères donc du coup, voyant le lien entre mon model "post" et "comment", il me propose des fonctionnalités croisées (lister tous les comments d'un post, etc).

Génial, non ?

lundi 28 août 2006

Django > Tutoriel partie 3 : let the beat goes on...

A l'issue de la partie 3 du tutoriel de Django d'une part et de la fin de la lecture du cas pratique de Ruby on rails, je peux dire que :

  • Même si je suis pas fan de la syntaxe de Rails, elle a le mérite d'être relativement claire,
  • Les tutoriels manquent de clareté (en tous cas, pour un néophyte python/django comme moi). Pourtant quand on prend les pages de documentation en tant que telles, elles semblent plus compréhensible... Dommage... Pour le coup, le cas pratique de Ruby on rails ou la documentation de Symfony peuvent être pris en exemple... Pour un néophyte comme moi, la documentation est clairement un avantage disctinctif pour le choix du framework.
  • Le fait de pouvoir importer des modules donne apparemment une grande puissance au framework en n'important que ce dont on a besoin, mais j'ai pas vu pour le moment de documentation sur le contenu des modules django.*

Il y a donc de fortes chances que dans un premier temps, je donne la priorité à Rails plutôt qu'à Django - mais j'attends de finir la partie 4 du tutoriel pour me prononcer...

dimanche 27 août 2006

Django > Tutoriel partie 1 & 2 : 1er bilan des courses

Je viens de finir la partie 1 et la partie 2 du tutoriel de Django.

Premières impressions à chaud :

  • Les possibilités de l'interface d'admin sont impressionnantes - il va falloir apprendre cette page sur les modèles pour en profiter...
  • Ils auraient pu trouver plus fun comme tutoriel qu'une application de sondage :-(
  • Le livre sur Ruby on rails est nettement plus pédagogique et clair, c'est pour le moment le grand défaut que je fais à django...
  • Suivre le tutoriel me permet de me familiariser avec python mais va falloir que je fasse les exercices de "Apprendre à programmer avec python" pour manipuler cela de façon plus simple et intuitive... ;-)

- page 1 de 2