Mon ancien site est accessible à l'adresse suivante : http://old.harobed.org. En savoir plus…

« Billets plus récentsBillets plus anciens »

Pyramid est framework extensible mais pas directement Pluggable car il est sans opinion

Voici un billet important concernant Pyramid et la différence entre « extensibility » et « pluggability » : Chris McDonough on pluggable apps.

Ce billet fait référence à un mail de Chris McDonough.

Voici quelques extraits de ce mail :

Pyramid doesn't provide enough "rails" to make it possible to integrate truly honest-to-god, download-an-app-from-a-random-place and-plug-it-in-to-create-a-system "pluggable" applications.
Because Pyramid itself isn't opinionated (it doesn't mandate a particular kind of database, it offers multiple ways to map URLs to code, etc), it's unlikely that someone who creates something "application-like" will be able to casually redistribute it to J. Random Pyramid User and have it "just work" by asking him to config.include a function from the package.
This is particularly true of very high level components such as blogs, wikis, twitter clones, commenting systems, etc.
The "integrator" (the Pyramid developer who has downloaded a package advertised as a "pluggable app") will almost certainly have made different choices about e.g. what type of persistence system he's using, and for the integrator to appease the requirements of the "pluggable application", he may be required to set up a different database, make changes to his own code to prevent his application from "shadowing" the pluggable app (or vice versa), and any other number of arbitrary changes.
  • D'un point de vue technique, Pyramid est un framework sans opinion :
  • Au niveau "fonctionnel" aussi Pyramid est sans opinion :
    • choisissez les urls que vous voulez
    • choisissez les modèles de template que vous voulez
    • choisissez les principes de fonctionnement de votre application comme vous voulez…

Pour toutes ces raisons, le framework Pyramid n'est pas directement "Pluggable".

For this reason, we claim that Pyramid has "extensible" applications, not pluggable applications.

Pyramid permet de réaliser des applications extensibles mais le framework n'est pas en lui même "Pluggable".

Dans cet extrait, on a l'impression que Pyramid ne permet pas de créer des applications "Pluggable", mais cela ne correpond pas à ce qu'explique le mail (il faut lire la suite du mail).

Autre extrait :

Any Pyramid application can be extended without forking it as long as its configuration statements have been composed into things that can be pulled in via "config.include".

Dit autrement : les outils fournis par Pyramid permettent de réaliser des applications extensibles, elles peuvent être fortement modifié sans avoir besoin de les forker.

Bien souvent, même dans des applications biens développées en programmation orienté objet, il est nécessaire de modifier une classe A utilisée par une autres classes B. Pour que la classe B utilise votre nouvelle classe A, vous êtes obligé d'effectuer des changements dans le code source de l'application… par conséquent vous êtes obligé de forker.

Grâce à la Zope Component Architecture (ZCA) vous pouvez effectuer cette modification sans modifier le code source de l'application, il suffit de lui dire d'utiliser une autre classe via le système de configuration de la ZCA.

Autre extrait :

Truly pluggable applications need to be created at a much higher level than a web framework, I fear, as no web framework can offer enough constraints to really make them "work out of the box".

En effet, il est possible (sera possible) de trouver des plugins pour des applications (basées sur le framework Pyramid ) et non pas directement des plugins basés sur le framework Pyramid .

Les applications devront faire des choix / avoir des opinions (template, couches modèles…), cela permettra la mise à disposition de plugins facilement installables.

D'un point de vu personnel, c'est ce type de choix que j'ai fait au sein de la société IS-Webdesign où je travaille. Pour pouvoir réaliser une application facilement extensible et mettre en place un système de plugins, j'ai choisi le framework Pyramid (avant cela Repoze BFG ).

Autre extrait :

It would be a noble goal to build an application with Pyramid that provides these constraints and which truly does offer a way to plug in applications (Joomla, Plone, Drupal come to mind).

Intéressant, je suis curieux de voir quand va apparaitre la première application de ce type. À noter que j'ai déjà vu des mails à propos de ce type de projet sur la mailing list de Repoze (mais je ne sais plus où).

C'est à ce niveau qu'intervient l'équipe du TurboGears qui a décidé aussi de rejoindre le mouvement Pylons… et plus particulièrement Pyramid. Le but de TurboGears est justement d'avoir des "opinions" et par conséquent de permettre la mise à disposition de plugins.

Read and Post Comments

Solution simple d'hébergement d'application web Python ?

Je rêve de quelque chose comme Heroku.

Qu'est ce que « Heroku » ?

C'est une solution rapide de déploiement d'applications webs basées sur le langage Ruby et plus précisément Ruby On Rails.

Voici un extrait de la présentation visible sur la page d'accueil du projet.

  1. Création d'une instance sur le serveur d'hébergement :

    $ sudo gem install heroku
    $ heroku create sushi
    Created http://sushi.heroku.com/
    git@heroku.com:sushi.git
    
    L'instance est créée sur le serveur, c'est ultra simple non ?
    Une seule commande pour faire cela : heroku create sushi.
  2. Déploiement de votre application (le tout basé sur git) :

    $ git push heroku master
    -----> Heroku receiving push
    -----> Rails app detected
    -----> Launching..... done
           http://sushi.heroku.com deployed
    

    Un simple push permet de mettre à jour votre site web.

  3. Autres commandes de configuration :

    $ heroku sharing: add fugu@sushi.com
    $ heroku domains: add sushi.com
    $ heroku rake db:migrate
    $ heroku db:push
    $ heroku addons:add memcahed
    

    Ici l'on peut voir comment il est facile d'ajouter un utilisateur, un domaine…

Défaut de "heroku" ?

À mes yeux heroku a un défaut rédibitoire : la plateforme n'est pas libre. Je ne peux pas l'installer sur mes serveurs. Pour utiliser heroku il est obligatoire de passer par leur plateforme l'hébergement.

Cependant, je vois heroku comme un modèle à suivre.

Est-ce que cela existe en Python ?

Un exemple à suivre ? en effet et plusieurs solutions dans le monde Python ont vu le jour :

  • djangy pour du déploiement Django, vraiment semblable à heroku
  • ep.io pour du déploiement WSGI (« We take your Django, Flask, Pylons or other WSGI code »)
  • Gondor pour du déploement Django

Là aussi le problème est que ces solutions ne sont pas libres.

Une solution ouverte ?

Oui, quelque chose d'ouvert existe, mais je ne l'ai pas encore testé : Silver Lining.

Je vous invite à lire la documentation, la solution est totalement libre. C'est un système basé sur Ubuntu (j'aurais aimé Debian).

Faudrait vraiment que j'expérimente cela.

Read and Post Comments

Variables privées en Javascript

Voici-ci dessous un pattern Javascript que je rencontre souvent :

(function() {

    ...

})();
C'est seulement depuis ce matin que j'ai compris son utilité (honte à moi).
Cela permet de définir des variables privées.

Voici un exemple de mise en oeuvre :

<html>
    <head>
    <script type="text/javascript">
        var public_var = 'public';
        var namespace = {};

        (function() {
            var private_var = 'private';
            namespace.foobar = function() {
                console.log('foobar function');
                console.log(private_var);
            }
        })();

        window.onload = function() {
            console.log('onload function');
            try {
                console.log(private_var);
            } catch(e) {
                console.log('private_var access deny here');
            }
            namespace.foobar();
        }
    </script>
    </head>
    <body>
    </body>
</html>

Le résultat dans la console est :

onload function
private_var access deny here
foobar function
private

La variable private_var est accessible seulement depuis le code qui se trouve dans :

(function() {

    ...

})();

Dans cet exemple, seul namespace.foobar a accès à cette variable.

Read and Post Comments

Première version de « jquery.expandBox plugin »

Je viens juste de publier un tout petit plugin Javascript basé sur jQuery : jquery.expandBox.

Le but de ce plugin est de permettre d'étendre horizontalement ou verticalement un ou plusieurs blocs HTML avec l'espace libre restant dans un élément parent du bloc à étendre.
Pour mieux comprendre je vous conseille de consulter la page de démonstration suivante : jquery.expandBox - Horizontal demo page.

La semaine dernière j'ai passé un peu de temps à la recherche d'un plugin de ce type sur jQuery Plugins mais je n'ai rien trouvé… Par contre, si de votre coté vous avez trouvé ce type de plugin, merci de me le signaler par mail ou dans les commentaires de ce billet.

Ce plugin est en version 0.1.0, à l'avenir il va peut être évoluer et même changer de nom si celui-ci ne s'avère pas pertinent.

Read and Post Comments

Mon point du vue à propos des feuilles de style CSS « reset.css »

Cela fait des années que je peste contre les feuilles de style « reset.css » du type :

* {margin: 0; padding: 0;}

Cette feuille de style reset.css n'est pas complète, mais elle illustre bien l'esprit de celle-ci. Pour un exemple plus complet, vous pouvez consulter le billet suivant CSS Tools: Reset CSS de Eric Meyer.

Aujourd'hui j'ai décidé d'en savoir plus sur le sujet et d'exprimer mon point de vue à travers ce billet.

Pourquoi je n'aime pas cela ?

Je connais le langage HTML. Je sais que la balise <p>…</p> doit afficher un paragraphe. Je sais que la balise <ul><li>…</li></ul> doit afficher une liste à puces…

Je connais plus ou moins la feuille de style par défaut des navigateurs web et donc je sais à l'avance plus ou moins à quoi m'attendre.

Lorsqu'un projet utilise une feuille de style « reset.css » et que je dois intervenir dans le code source HTML, ajouter du contenu… des balises P , UL > LI … je m'attends à avoir un comportement de rendu standard ou conforme au design du site modifié.

Lorsque je découvre que mes paragraphes n'ont aucunes marges, mes listes à puces aucunes puces, aucunes indentation alors je peste contre cette feuille de style « reset.css » !

Ce que je préfère

Revenons à la source : « quel est le but de la feuille de style reset ? »

  1. le W3C définit une feuille de style standard : Appendix D. Default style sheet for HTML 4
  2. tous les navigateurs ne respectent pas scrupuleusement cette feuille de style standard (voir section « Un rendu spécifique à chaque navigateur » du billet « Le rendu par défaut des éléments HTML » )
  3. si un webdesigner se base sur la feuille de style par défaut de son navigateur il peut découvrir des surprises lorsqu'il consultera sa page sur un navigateur différent
  4. => pour pallier à ce problème, il utilise une feuille de style « reset.css »

Ce que je propose

Ce que je propose est de remplacer la feuille de style reset.css par une feuille de style w3c_default.css. Cette feuille de style contiendrait les règles définis par le W3C : Appendix D. Default style sheet for HTML 4 (j'ai cherché le style par défaut pour les spécifications HTML 5 mais je n'ai pas trouvé).

Cette feuille de style w3c_default.css permet d'atteindre deux objectifs :

  • une feuille de style identique pour tous les navigateurs
  • une feuille de style par défaut conforme aux standards

Code source de la feuille de style en question : w3c_default.css.

Mise à jour (20-09-2010 à 13h49):

Read and Post Comments
« Billets plus récentsBillets plus anciens »