Derniers billets de blog

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

Plone conférence 2010 à Bristol: génial !

Les conférences Plone ont eu lieu cette année à Bristol en Angleterre, du 25 au 31 octobre. Avec deux jours de formation / mini-prints, trois jours de conférences puis un week end complet de sprint, cette semaine a été un véritable succès. Et Makina Corpus était présent en force !

"Plone conférence Bristol 2010"

Cet évènement annuel, organisé par la Fondation Plone,  rassemble pendant une semaine des utilisateurs et des développeurs du CMS Plone. C'est l'occasion pour chacun de:

  • Découvrir les nouveaux développements et fonctionnalités de Plone, le futur Plone 5.
  • Assister à des présentations données par les grands spécialistes ou encore les membres fondateurs de Plone.
  • Échanger son expérience avec des utilisateurs et développeurs venant des quatre coins de la planète.
  • Bénéficier de formations dispensées par les plus grands spécialistes.
  • Mettre la main à la patte pendant les deux jours de "sprint".
  • Et biensûr faire la fête!

Vivre ou revivre la conférence

Toutes les présentations et vidéos sont déjà disponibles et librement consultables sur Internet:

La communauté francophone (France et Belgique) regroupée autour de Plone

Voir l'article sur Plone.fr pour en savoir plus.

Ma participation

Jean-Michel François a travaillé sur un système permettant de corréler des types de contenu Dexterity et Archetypes.

J'ai eu le plaisir de travailler sur plusieurs fronts:

  • Portage de produits communautaires sur Plone 4  (tels que collective.dewplayer, collective.portlet.contact, ou encore collective.z3cform.norobots).
  • Bugfixes sur plone.directives et collective.amberjack afin d'améliorer le support de l'internationalisation.
  • Participation au travail réalisé par Jean-Michel François sur un système permettant de corréler des types de contenu Dexterity et Archetypes.

J'ai eu le plaisir au cours des deux jours de sprint post-conférence d'intégrer l'équipe des "core-developers" de Plone. Un grand merci à Makina Corpus pour m'avoir permis d'assister à cet évènement !

Plone conférence 2010 à Bristol

La fine équipe - Photo de Stefan Antonelli

ImportError: [...].so: undefined symbol: PyUnicodeUCS4_AsEncodedString

Après avoir mis à jour ma distribution vers Ubuntu 10.04 j'ai dû recompiler manuellement un python 2.4 pour faire tourner mes projets Plone 3. Mais voilà en lançant mon instance, je me retrouve avec l'erreur suivante: "ImportError: [...].so: undefined symbol: PyUnicodeUCS4_AsEncodedString"...

Solution: supprimer les eggs concernés et les recompiler

En effet il semble bien sur le UCS de mon nouveau python est différent de l'ancien.

Les eggs précompilés (contenant des fichiers *.so) doivent être supprimés puis ré-installés/compilés en relançant le buildout (par exemple).

Exemple de commande permettant de trouver les eggs concernés:

find /home/<your-user>/.buildout/eggs/ -name '*.so' 
    | sed -re "s:(.*/eggs/[^/]*).*:\1:g" 
    | sort -u

Comment connaître le UCS utilisé ?

python -c "import sys; print(sys.maxunicode<66000) and 'UCS2' or 'UCS4'"

Qu'est-ce que sys.maxunicode ? Je cite: """An integer giving the largest supported code point for a Unicode character. The value of this depends on the configuration option that specifies whether Unicode characters are stored as UCS-2 or UCS-4.""" (cf. http://docs.python.org/py3k/library/sys.html#sys.maxunicode)

Plone 4... enfin !

Plus rapide. Plus puissant. Plus fonctionnel. Voici la promesse de cette nouvelle mouture. Bienvenue à Plone 4.

« Plone 4 est basé sur les fonctionnalités attendues et apportées par la communauté mondiale des développeurs et utilisateurs Plone » (Alexander Limi co-fondateur de Plone et User Experience Lead du projet Firefox). « Nos développeurs et utilisateurs voulaient de meilleures performances : Plone 4 est beaucoup plus rapide, nécessite moins de mémoire, et permet de servir efficacement de gros volumes de fichiers. Nous n'avons pas pour autant sacrifié ce que Plone faisait bien jusqu'ici. Plone 4 n'est pas juste plus puissant, il continue à améliorer Plone sur les domaines qui ont fait sa réputation : ergonomie, sécurité, facilité d'installation et de mise à jour, design par défaut impeccable. »

Pour en savoir plus, et en français !, n'hésitez à vous rendre sur le portail plone.fr.

Petit résumé des principales avancées apportées par Plone 4:

  • Une amélioration significative des performances
  • Un nouveau thème
  • Améliorations de la recherche et de l'indexation
  • Tableaux de bords en fonction du groupe dans lequel appartient l'utilisateur
  • Amélioration majeure de la gestion des media et des fichiers volumineux
  • Nouvelle implémentation des dossiers, plus rapide.
  • Meilleure gestion des utilisateurs et des groupes
  • Framework de formulaires dynamiques basé sur JQuery Tools
  • Amélioration du design et du paramétrage par défaut
  • Mises à jour plus simples
  • Empreinte mémoire réduite
  • Modérnisation de l'infrastructure


Quelques articles pour en savoir plus:
* What's New in Plone 4
* Web CMS Plone 4 Improves Performance, User Experience
* 5 Things That Rock About Plone 4
* A User's Guide to Plone

Etat des lieux des publications autour de Plone

Merci à Encolpe pour cet état de l'art des ouvrages disponibles pour ceux qui souhaitent apprendre à utiliser Plone et développer des applications web basées sur Plone.

How to install Oracle 10g and Tora on GNU Linux Ubuntu Karmic 9.10

Thanks to my collegue Gaël Pegliasco, I successfully installed Oracle 10g Full Edition on my Ubuntu Karmic 9.10 (64 bits). We will see now how to install Tora, an open-source multi-platform database management GUI that supports accessing most of the common database platforms in use, including Oracle.

Installing Oracle 64 bits

See this wonderfull howto written by Gaël Pegliasco which explains how to install Oracle 10g 64 bits.

Now we assume your ORACLE_HOME is "/opt/oracle/oracle/product/10.2.0/db_1".

IMPORTANT: your user must have access to the ORACLE_HOME files.

Installing Tora

Install the prerequisites and development libraries

sudo apt-get install build-essential g++ gcc autoconf automake flex zlib1g-dev docbook-xsl
sudo apt-get install libqt3-mt-dev libqt3-compat-headers libqscintilla-dev
sudo apt-get install debhelper dpatch texinfo
sudo apt-get install libaio1

Dowload Tora from Sourceforge

http://sourceforge.net/projects/tora/files/

cd /to/tora/tarball
tar xf tora-2.1.2.tar.bz2
cd tora-2.1.2
mkdir INSTALL_DIR

Environment Variables

vi ~/.bashrc
+ # Oracle 10g Standard Edition
+ export ORACLE_HOME=/opt/oracle/oracle/product/10.2.0/db_1
+ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
+ export PATH=$PATH:$ORACLE_HOME/bin
+ export ORACLE_SID=orcl

source ~/.bashrc
sudo vi /etc/ld.so.conf.d/oracle.conf
+ /opt/oracle/oracle/product/10.2.0/db_1/lib

sudo ldconfig

Include path oddity

Thanks to Brad Hudson !

sudo ln -s /opt/oracle/oracle/product/10.2.0/db_1/ ${ORACLE_HOME}/include

Building and installing TOra

./configure --exec-prefix=/home/sbo/Logiciels/tora/tora-2.1.2/INSTALL_DIR \
            --prefix=/home/sbo/Logiciels/tora/tora-2.1.2/INSTALL_DIR

You should see in the logs: "checking for oracle... yes"

make
make install

Then you can start Tora:

./INSTALL_DIR/bin/tora

ZODB FileStorage CorruptedTransactionError

Comment remettre en état une ZODB corrompue avec le script fsrecover.py fournit directement dans le code de la ZODB.

Erreur rencontrée au démarrage de Zope

Dans mon cas le serveur Zope ne voulait plus démarrer et l'erreur suivante s'affichait dans la console (mon projet tourne dans un buildout):

[...]
<buildout-directory>/parts/zope2/lib/python/ZODB/FileStorage/FileStorage.py
", line 52, in panic
raise CorruptedTransactionError(message)
ZODB.FileStorage.FileStorage.CorruptedTransactionError: %s data record exceeds t
ransaction record at %s

Correction de la base de données corrompue avec fsrecover.py

Il faut utiliser pour cela l'interpréteur python du projet. Ce dernier doit avoir accès à l'ensemble des modules de zope2. J'utilise pour cela l'interpréteur python zopepy généré par le buildout via la "part" suivante dans le fichier de configuration buildout.cfg:

[zopepy]
recipe = zc.recipe.egg
eggs = ${instance:eggs}
interpreter = zopepy
extra-paths = ${zope2:location}/lib/python
scripts = zopepy

Rétablissons à présent notre base de données:

cd <buildout-directory>/var/filestorage
../../bin/zopepy ../../parts/zope2/lib/python/ZODB/fsrecover.py -v 1 Data.fs Data.fs.recover

Il faut être patient, le script va scanner toutes les transactions de la base, des plus anciennes aux plus récentes.

Que fait le script "fsrecover.py" ? Tout est dans le code: "Recover data from a FileStorage data file, skipping over damaged data.  Any damaged data will be lost.  This could lead to useless output if critical data is lost.".

Il ne reste plus qu'à mettre en production la base Data.fs.recover et à redémarrer le serveur Zope:

mkdir corrupted
mv Data.fs corrupted/
mv Data.fs.index corrupted/
mv Data.fs.tmp corrupted/

mv Data.fs.recover Data.fs
mv Data.fs.recover.index Data.fs.index
mv Data.fs.recover.tmp Data.fs.tmp

cd ../..
./bin/instance fg