Derniers billets de blog
Plone conférence 2010 à Bristol: génial !
"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:
- Les supports de présentation sur SlideShare.
- Quelques photos.
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 !
La fine équipe - Photo de Stefan Antonelli
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 !
« 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
How to install Oracle 10g and Tora on GNU Linux Ubuntu Karmic 9.10
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
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