Derniers billets de blog

Expert Python/Django/Plone et chef de projet agile, j'aime coder et découvrir de nouvelles technologies.

La vérité sur le chiffrage en SSLL

Les Sociétés de Services en Logiciels Libres semblent établir des devis de la même façon que les sociétés de services classiques, mais la vérité est légèrement différente.

Un troll bien sympatique de mon collègue Eric Bréhault !

===============================================

Reprise du cache Google, le lien n'était plus disponible

===============================================

La vérité sur le chiffrage en SSLL

Les Sociétés de Services en Logiciels Libres semblent établir des devis de la même façon que les sociétés de services classiques, mais la vérité est légèrement différente. 

En règle générale, quand vous demandez à une société de services en Logiciels Libres de vous chiffrer un développement logiciel, vous obtenez quelque chose dans ce genre:

  Montant
Intégration graphique 5 000 euros
Déploiement du serveur et des composants logiciels 2 500 euros
Développement de la fonctionnalité spécifique 1 12 000 euros
Développement de la fonctionnalité spécifique 2 7 000 euros
Paramétrage et connectivité avec le SI 6 500 euros
Gestion de projet 2 500 euros

C'est ainsi que nous faisons car cela est crédible, et cela ressemble beaucoup à ce qu'une SSII classique vous aurait proposé. C'est donc une excellente façon d'éviter de rentrer dans des explications qui pourraient être fastidieuses à un moment où on n'a pas envie d'en donner.

Mais pourtant, si nos chiffrages aboutissent bien au montant total que nous vous soumettons, le détail du calcul n'est pas reflété par le tableau des coûts tel que celui qui figure ci-dessus.

Nous sommes des gens simples. Nous aimons coder.

Il faut tout d'abord comprendre que nous sommes des gens simples. Nous aimons coder. Coder ne nous coûte pas car c'est notre plaisir. D'ailleurs, nous codons gratuitement une bonne partie de notre temps (dans le cadre de nos contributions open sources). Le reste de notre travail, en revanche, nous coûte.

Voici donc ma grille de chiffrage :

  Montant
Codage 0 euros
Déploiement + 0 si serveur Linux avec accès SSH et compte sudoer,
sinon + 10 000 euros
Le client a rédigé un cahier des charges 1 000 euros x nombre de pages
Le client a un planning + 2 000 euros par dates imposées
Le client veut mettre en place un comité de pilotage + 10 000 euros
Des AMOA sont impliqués + (500 euros x nb de pages du cahier des charges x nb d'AMOA)
La réponse doit suivre le code des marchés publics ou doit passer par un service achats + 10 000 euros
Il faut produire et suivre un Plan d'Assurance Qualité + 15 000 euros
Le client demande à modifier la solution open source sur laquelle on s'appuie d'une manière contraire à la philosophie de cette solution. + 1 000 000 euros en pièces de 20 centimes emballées
par paquets de 1, 1, 2, 3, 5, 8, etc. jusqu'à 2178309
conformément à la suite de Fibonacci (toute erreur entraîne évidemment des pénalités)

C'est facile et ça marche ! Exemples :

  • Cahier des charges de 10 pages avec une date de livraison : 12 000 euros
  • Cahier des charges de 120 pages, PAQ, service achat, 7 dates dans le planning : 159 000 euros

collective.pfg.norobots: a PloneFormGen captcha based on questions and answers

I have released a new captcha widget/field for PloneFormGen. Unlike other captcha fields that are based on images, this captcha is based on a predefined list of questions and answers.

Overview

collective.pfg.norobots is a PloneFormGen field using collective.z3cform.norobots.

collective.z3cform.norobots provides a "human" captcha widget based on a list of question/answer(s).

This captcha can be used :

  • as a plone.app.discussion (Plone Discussions) captcha plugin
  • as a z3c form field
  • as a PloneFormGen field with collective.pfg.norobots

Requirements

I have tested this release with :
  • Plone 4.2.1.1 & PloneFormGen 1.7.2 & collective.z3cform.norobots 1.4.2
  • Plone 4.1.6 & PloneFormGen 1.7.2 & collective.z3cform.norobots 1.4.2

Screenshot

collective.pfg.norobots

Installation

Getting the module

Add collective.pfg.norobots to your plone.recipe.zope2instance buildout section e.g.:
[instance]
...
eggs =
    Plone
    ...
    collective.pfg.norobots
Or, you can add it as a dependency on your own product setup.py:
install_requires=[
    ...
    'collective.pfg.norobots',
],

Enabling the module

Install the module from the Add-ons control panel. That's it!

Quickly test ?

Download collective.pfg.norobots and use virtualenv and buildout to test the module:
easy_install virtualenv
cd collective.pfg.norobots
virtualenv .
source bin/activate
(collective.pfg.norobots) easy_install zc.buildout
!!! check the buildout config file ``test-plone-base.cfg`` before running !!!
(collective.pfg.norobots) ln -s test-plone-4.2.x.cfg buildout.cfg
(collective.pfg.norobots) python bootstrap.py
(collective.pfg.norobots) bin/buildout
[...] be patient... [...]
(collective.pfg.norobots) ./bin/instance fg
Go to http://localhost:8080, add a new Plone Site and install collective.pfg.norobots.
 
Launch tests:
(collective.pfg.norobots) ./bin/test -s collective.pfg.norobots
Launch code coverage:
(collective.pfg.norobots) bin/coverage
(collective.pfg.norobots) bin/report
And open with a browser htmlcov/index.html

Credits

Source code

Source code is hosted on Github.

How to contribute and submit a patch ?

Source code and an issue tracker is hosted on Github.

plonetheme.drupal : Get all the power of Drupal for Plone ;)

Strongly inspired by the Drupal theme Bartik (default theme in Drupal 7), this theme may help sell Plone to PHP guys ;)

Overview

plonetheme.drupal is an installable Plone Theme using plone.app.theming, based on the default Sunburst Plone theme.
 

Strongly inspired by the Drupal theme Bartik (default theme in Drupal 7), this theme may help sell Plone to PHP guys ;)

To be installed before any demonstration to an audience of Drupal followers ;) !

Do you want to learn more about Plone versus Drupal ? Install this theme and visit http://<your-plone-site>/@@plone-versus-drupal

Requirements

Tested with Plone 4.1.4 (http://plone.org/products/plone)

plone.app.theming (please configure your buildout corresponding to plone.app.theming installation)

Screenshot

Plone Theme Drupal Screenshot

Installation

Getting the theme

Add plonetheme.drupal to your plone.recipe.zope2instance buildout section's eggs parameter e.g.:

[instance]
eggs =
    Plone
    ...
    plonetheme.drupal

Or, you can add it as a dependency on your own product setup.py:

install_requires=[
    ...
    'plonetheme.drupal',
],

Enabling the theme

Install the theme from the Add-ons control panel. That's it!

Quickly test ?

Download plonetheme.drupal and use virtualenv and buildout to test the theme:

easy_install virtualenv
cd plonetheme.drupal
virtualenv .
source bin/activate
(plonetheme.drupal) easy_install zc.buildout
(plonetheme.drupal) bin/buildout
[...] be patient... [...]
(plonetheme.drupal) ./bin/instance fg
Go to http://localhost:8080, add a new Plone Site and install plonetheme.drupal

Launch tests:

(plonetheme.drupal) ./bin/test -s plonetheme.drupal

Credits

Sylvain Boureliou [sylvainb]

Un nouveau site Plone pour Angers Loire Développement

L'agence de développement économique Angers Loire Développement vient de se doter d'un tout nouveau site web basé sur Plone.

Angers Loire Développement est l’agence de développement économique de la communauté d’agglomération d’Angers (Angers Loire Métropole). Elle propose des services opérationnels pour accompagner les entreprises dans leurs phases de création, d'implantation et de développement sur le territoire.

Entreprises et acteurs de l'économie angevine, n'hésitez à vous rendre sur le site pour communiquer sur votre actualité. Angers Loire Développement donne la possibilité aux entreprises locales de communiquer sur www.angers-developpement.com. Actualités commerciales, nouveaux produits, résultats, événements, les entreprises angevines ont désormais une nouvelle tribune !

http://www.angers-developpement.com

Après le développement du site de Nantes Métropole Développement, Makina Corpus améliore avec ce nouveau projet son expertise dans la conception de portail web à destination des agences de développement économique, incluant des outils rédactionnels simples et efficaces, ainsi que de nombreux services à forte valeur ajoutée (média, newsletter, connexion à des annuaires CiviCRM ou SugarCRM, GED, espaces collaboratifs, ouverture à la contribution externe, intégration au SI, etc.).

Plus d'information ? n'hésitez pas soit à me contacter via la page "contact", soit à contacter directement Makina Corpus.

Quelques captures d'écran:

Angers Loire Développement - Capture 1

 

Angers Loire Développement - Capture 2

 

Angers Loire Développement - Capture 3

Zope, Plone, ZcxOracleDA et les retours chariots Windows...

Dans le cadre d'une application basée sur Plone et Oracle, de nombreuses fonctionnalités ne fonctionnaient plus du jour au lendemain, sans aucune raison particulière. L'exécution de certaines ZSQL Methods faisant appel à des procédures stockées dans Oracle étaient en erreur ORA-06550 ! Des heures de debug avec le client avant de trouver la solution...

Les erreurs remontées par Oracle

DatabaseError: ORA-06550, ce qui signifie qu'il y a une erreur de compilation côté Oracle, or d'après de nombreuses vérifications, tous les packages, triggers, etc. sont bien compilés dans la base de données.

PLS-00103: Encountered the symbol "" when expecting one of the following, ce qui signifie qu'il y a une erreur de syntaxe PL/SQL quelque part, mais où ? laquelle ? Tout semble bon et l'exécution des requêtes incriminées via SQL+ ou l'onglet "Test" du connecteur ZcxOracle fonctionnent très bien.

La cause

Après de nombreux tests et debugs, un post de blog m'a mis sur la bonne piste : Oracle semble s'en sortir assez mal si le code d'une requête SQL contient des retours chariots Windows CRLF !

Et il s'avère que c'est le cas, mais pas pour toutes les requêtes, uniquement celles qui font appel à une procédure stockée, exemple de contenu d'une ZSQL Method :

BEGIN
    schema.package.procedure(
        param1,
        param2,
        param3);
END;

Un patch rapide au niveau du connecteur ZcxOracleDA

Dans la méthode "query" de ZcxOracleDA/db.py, filtrer la requête SQL en remplaçant les caractères "CRLF" par leur équivalent Unix "LF".

qs = qs.replace("\r\n", "\n")

Et voilà !

La vrai correction

Si vous travaillez sous Windows, configurer votre éditeur de sorte qu'il n'utilise pas de caractères CRLF mais uniquement les caractères Unix LF.

Ou encore mieux : passer à Linux/Unix !

Plone Unified Installer and ZcxOracleDA

Trying to setup cx_Oracle and ZcxOracleDA on a Plone/Zope Zeo setup using the Unified Installer (Plone 3.3.5), I had the following error when starting a zeo client: "ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory". Here is a solution.

Steps required

  • Oracle installation
  • cx_Oracle installation in the python used by Zope/Plone. Don't forget to test your connectivity with the Oracle database:
    $ cd <zope-install>
    $ ./Python-2.4/bin/python
    Python 2.4.6 [...]
    >>> import cx_Oracle
    >>> connection = cx_Oracle.connect('<user-name>/<user-password>@<db-name>')
    >>> cursor = connection.cursor()
    >>> cursor.execute("select count(*) from mytable").fetchall()
    [(200805,)]
  • ZcxOracleDA untarred in the "products" directory

libclntsh.so.10.1: cannot open shared object file ???

$ cd <zope-install>/zeocluster
$ ./bin/client1 fg
2010-12-02 14:55:33 INFO ZServer HTTP server started at Thu Dec  2 14:55:33 2010
        Hostname: 0.0.0.0
        Port: 8080
2010-12-02 14:55:33 INFO Zope Set effective user to "plone"
[...]
  File "build/bdist.linux-x86_64/egg/cx_Oracle.py", line 6, in __bootstrap__
ImportError: libclntsh.so.10.1: cannot open shared object file: \
No such file or directory

The Zope instance is running with the effective user "plone", who apparently has no right to access Oracle libraries.

The user "plone" needs access to the Oracle libraries

Add a home directory  and a shell for "plone":

$ sudo usermod -s /bin/bash -d /home/plone plone
$ sudo chown plone:plone /home/plone
$ sudo chmod 750 /home/plone

Add the user "plone" to a group that has access to the Oracle librairies, in my case "oinstall":

$ sudo gpasswd -a plone oinstall

$ORACLE_HOME and $LD_LIBRARY_PATH must be exported from his .bashrc or ~/.bash_profile file:

$ sudo su - plone
(plone)$ cd ~
(plone)$ vim .bashrc
export ORACLE_HOME=/opt/oracle/oracle/product/10.2.0/db_1                               
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
(plone)$ ln -s ~/.bashrc ~/.bash_profile
(plone)$ sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Dec 2 15:46:00 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Enter user-name:

And voila!