<?xml version="1.0" encoding="ISO-8859-15"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#"
      xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title mode="escaped" type="text/html">Julien Anguenot</title>
  <tagline>ATOM Feed - Julien Anguenot</tagline>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot" />
  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot</id>
  <generator url="http://cps-project.org" version="3">CPS</generator>
  <modified>2005-12-21 02:11:40</modified>

  <link rel="service.feed"
        href=" http://blogs.nuxeo.com/sections/blogs/julien_anguenot/atomFeed"
        title="Julien Anguenot" type="application/atom+xml" />
  <link rel="service.post"
        href=" http://blogs.nuxeo.com/sections/blogs/julien_anguenot/postAtom"
        title="Julien Anguenot" type="application/atom+xml" />
  <link rel="service.categories"
        href=" http://blogs.nuxeo.com/sections/blogs/julien_anguenot/atomCategories"
        title="Julien Anguenot" type="application/atom+xml" />

  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">ICSSEA 2006 : Nuxeo 5 talk this thursday</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_12_05_icssea-2006-nuxeo-5-talk-thursday" />
  <issued>2006-12-05T12:37:21Z</issued>
  <modified>2006-12-05T12:37:21Z</modified>
  <created>2006-12-05T12:32:29Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>ecm</dc:subject>
  
  
    <dc:subject>nuxeo5</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I will be giving a talk at the 19th
  International Conference "Software &amp;amp; Systems Engineering and their
  Applications", about ECM
  and Nuxeo 5, this thursday in
  Paris.
  
  You can find the detailed program of the conference here. 
  The conference will be held by the CNAM. You can find information about the
  location over there.

  
  See you there
   </summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;p&gt;I will be giving a talk at the &lt;a
  href="http://deptinfo.cnam.fr/CMSL/icssea/icssea2006/icssea2006_US/"&gt;19&lt;sup&gt;th&lt;/sup&gt;
  International Conference "Software &amp;amp; Systems Engineering and their
  Applications"&lt;/a&gt;, about &lt;a
  href="http://en.wikipedia.org/wiki/Enterprise_content_management"&gt;ECM&lt;/a&gt;
  and &lt;a href="http://www.nuxeo.org"&gt;Nuxeo 5,&lt;/a&gt; this thursday in
  Paris.&lt;br /&gt;
  &lt;/p&gt;
  You can find the detailed program of the conference &lt;a
  href="http://deptinfo.cnam.fr/CMSL/icssea/icssea2006/icssea2006_US/"&gt;here&lt;/a&gt;.&amp;nbsp;
  The conference will be held by the CNAM. You can find information about the
  location over &lt;a
  href="http://deptinfo.cnam.fr/CMSL/icssea/icssea2006/icssea2006_US/"&gt;there&lt;/a&gt;.&lt;br /&gt;

  &lt;br /&gt;
  See you there&lt;br /&gt;
   &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_12_05_icssea-2006-nuxeo-5-talk-thursday</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_12_05_icssea-2006-nuxeo-5-talk-thursday/atom?2006_12_05_icssea-2006-nuxeo-5-talk-thursday"
        title="Edit Here - ICSSEA 2006 : Nuxeo 5 talk this thursday" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Java soon to be opened !</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_10_28_java-soon-to-be-opened" />
  <issued>2006-10-28T14:08:53Z</issued>
  <modified>2006-10-28T14:08:53Z</modified>
  <created>2006-10-28T14:01:19Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>java</dc:subject>
  
  
    <dc:subject>nuxeo5</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Here is a good news for Nuxeo 5 : Sun CEO
  sets open source Java time frame
   
   As we read in a few discussion threads after the release of  NXRuntime and Nuxeo Core, some
  people were pointing out that, with our Java switch, we
  weren't using a full open source stack anymore. These discussions will be
  over soon.
   
   As well, some people asked us if we considered making ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">Here is a good news for &lt;a href="http://www.nuxeo.org"&gt;Nuxeo 5&lt;/a&gt; : &lt;a
  href="http://news.yahoo.com/s/infoworld/20061025/tc_infoworld/83138"&gt;Sun CEO
  sets open source Java time frame&lt;/a&gt;&lt;br /&gt;
   &lt;br /&gt;
   As we read in a few discussion threads after the release of&amp;nbsp; &lt;a
  href="http://www.nuxeo.org/sections/projects/runtime/"&gt;NXRuntime&lt;/a&gt; and &lt;a
  href="http://www.nuxeo.org/sections/projects/core/"&gt;Nuxeo Core&lt;/a&gt;, some
  people were pointing out that, with our &lt;a
  href="http://www.nuxeo.org/sections/about/java-switch/"&gt;Java switch,&lt;/a&gt; we
  weren't using a full open source stack anymore. These discussions will be
  over soon.&lt;br /&gt;
   &lt;br /&gt;
   As well, some people asked us if we considered making Nuxeo 5 running using
  gcj. Well, ... we have been trying to leverage &lt;a
  href="http://gcc.gnu.org/java/"&gt;gcj&lt;/a&gt; with the &lt;a
  href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
  project where we were using &lt;a href="http://lucene.apache.org/"&gt;Lucene&lt;/a&gt;
  through gcj. This is working ok but what a pain... It appeared to be
  extremely complicated to find the right version of gcj depending on the
  target platform on production and that caused us lots of worries... So
  definitely not a viable option. Ask the hosting companies if you are not
  convinced ... As well, a lot of work is required at application level while
  trying to port gcj-based application on upper versions of gcj because of
  bugs in the compiler itself. So much frustration...&lt;br /&gt;
   &lt;br /&gt;
   Furthermore, we can expect Java enabled Linux distributions out of the box
  in the future with Java applications pre-installed and shipped with the
  distribution itself : for instance &lt;a href="http://www.jboss.org"&gt;JBoss
  AS&lt;/a&gt;.&lt;br /&gt;
   &lt;br /&gt;
   Because of the fact that Nuxeo bas been caring about open source for more
  than 6 years, playing the open source game and choosing a core business
  fully based on a transparent open source model, we are more than happy that
  this time frame set announcement comes up almost at the same time as the
  release of Nuxeo 5.&lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_10_28_java-soon-to-be-opened</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_10_28_java-soon-to-be-opened/atom?2006_10_28_java-soon-to-be-opened"
        title="Edit Here - Java soon to be opened !" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Nuxeo Core 1.0 released !</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_10_25_nuxeo-core-1-0-released" />
  <issued>2006-10-25T02:26:06Z</issued>
  <modified>2006-10-25T02:26:06Z</modified>
  <created>2006-10-25T02:24:16Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>eclipse</dc:subject>
  
  
    <dc:subject>ecm</dc:subject>
  
  
    <dc:subject>java</dc:subject>
  
  
    <dc:subject>jboss</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>nuxeo5</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I'm proud to let you know that we released  Nuxeo Core 1.0
  !  This is the first release of the new embeddable document
  management core that is the foundation of the upcoming Nuxeo 5 ECM platform.
   
   Nuxeo Core is an embeddable document management core, based on Nuxeo
  Runtime. It provides all necessary low-level services to define, store,
  manage, audit, request and ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">I'm proud to let you know that we released&amp;nbsp; &lt;a
  href="http://www.nuxeo.org/sections/projects/core"&gt;Nuxeo Core 1.0&lt;/a&gt;
  !&amp;nbsp; This is the first release of the new &lt;i&gt;embeddable document
  management core&lt;/i&gt; that is the foundation of the upcoming &lt;a
  href="http://www.nuxeo.org"&gt;Nuxeo 5 ECM platform.&lt;/a&gt;&lt;br /&gt;
   &lt;br /&gt;
   Nuxeo Core is an embeddable document management core, based on Nuxeo
  Runtime. It provides all necessary low-level services to define, store,
  manage, audit, request and search content. It is the kernel of &lt;a
  href="http://www.nuxeo.org/sections/projects/"&gt;Nuxeo 5&lt;/a&gt; and can also be
  embedded in third-party applications to provide advanced content management
  features. It can run on any Java platform, can be easily extended using
  plug-ins (thanks to &lt;a
  href="http://www.nuxeo.org/sections/projects/runtime/"&gt;Nuxeo Runtime&lt;/a&gt;)
  and implements JCA (Java EE Connector Architecture) to be easily plugged
  into existing applications or information systems.&lt;br /&gt;
   &lt;br /&gt;
   Nuxeo core key features&amp;nbsp; :&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;Model: content management concepts definition&lt;/li&gt;

   &lt;li&gt;Storage Manager: low-level content storage and retrieval
   (JCR-based)&lt;/li&gt;

   &lt;li&gt;Schema Manager: XMLSchema based content schema definition and
   management&lt;/li&gt;

   &lt;li&gt;Version Manager: versioning management&lt;/li&gt;

   &lt;li&gt;Content Type Manager: content types management (a content type is a set
   of schemas)&lt;/li&gt;

   &lt;li&gt;Query Engine: SQL-like unified query engine&lt;/li&gt;

   &lt;li&gt;Security Manager: access rights manager and controller&lt;/li&gt;

   &lt;li&gt;Life cycle management: define, deploy and applies life cycle on
   document types (JCR storage)&lt;/li&gt;

   &lt;li&gt;Event Service: abstract event service to broadcast and receive
   events&lt;/li&gt;

   &lt;li&gt;Local (POJO) and Remote (JavaEE) access using dedicated client
   sessions.&lt;/li&gt;

   &lt;li&gt;Set of extension points allowing third party code to extend and
   customize the Nuxeo Core services&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   You will find detailed information &lt;a
  href="http://www.nuxeo.org/sections/projects/core/nuxeo-core-reference/downloadFile/file/NXCore-Documentation.pdf"&gt;
  here.&lt;/a&gt; This is a detailed technical overview of Nuxeo Core 1.0. &lt;br /&gt;
   &lt;br /&gt;
   A JBoss binary &lt;a
  href="http://www.nuxeo.org/static/NuxeoCore/NuxeoCore-Full-JBoss-1.0.zip"&gt;release&lt;/a&gt;
  is available along with a simple &lt;a
  href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt; RCP &lt;a
  href="http://www.nuxeo.org/static/demos/"&gt;demo application&lt;/a&gt; that
  leverages the Nuxeo Core. (The demo application is available for Linux, OSX
  and Win32). You will find in &lt;a
  href="http://www.nuxeo.org/sections/projects/core/nuxeo-core-demo-howto/downloadFile/file/NXCoreDemo-Howto.pdf"&gt;
  this document&lt;/a&gt; all the needed information related the Eclipse demo
  application.&lt;br /&gt;
   &lt;br /&gt;
   Check the &lt;a href="http://www.nuxeo.org/sections/projects/core/"&gt;project
  homepage&lt;/a&gt; for more information and especially if you want to check the
  source code.&lt;br /&gt;
   &lt;br /&gt;
   This is an important step toward the release of &lt;a
  href="http://www.nuxeo.org"&gt;Nuxeo 5&lt;/a&gt; &lt;a
  href="http://www.nuxeo.org/sections/about/roadmap"&gt;planned&lt;/a&gt; in the middle
  of next month. We are all more than happy and proud of this new platform and
  we hope you'll enjoy it as well !&lt;br /&gt;
  &lt;br /&gt;
  Stay tuned there is a lot in the pipe ! :)&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_10_25_nuxeo-core-1-0-released</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_10_25_nuxeo-core-1-0-released/atom?2006_10_25_nuxeo-core-1-0-released"
        title="Edit Here - Nuxeo Core 1.0 released !" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Switching from Emacs to PyDev...</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_09_15_switching-from-emacs-to-pydev" />
  <issued>2006-09-15T08:00:16Z</issued>
  <modified>2006-09-15T08:00:16Z</modified>
  <created>2006-09-15T07:41:47Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>eclipse</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I gotta admit I was wrong...
   
   I recently tried out Pydev and
  Pydev extensions on Eclipse 3.2 for my
   Python and Zope
  developments. Wouah ! 
   
   I've been using these plugins for couple of weeks and I already can't
   switch to emacs anymore. I wouldn't have believed It could have ever
   happened. I've been using emacs for years and somehow refused to try
   out any IDE ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">I gotta admit I was wrong...&lt;br /&gt;
   &lt;br /&gt;
   I recently tried out &lt;a href="http://www.fabioz.com/pydev/"&gt;Pydev&lt;/a&gt; and
  &lt;a href="http://www.fabioz.com/pydev/"&gt;Pydev extensions&lt;/a&gt; on &lt;a
  href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt; 3.2 for my&lt;br /&gt;
   Python and &lt;a id="http://www.zope.org" name="http://www.zope.org"
  title="http://www.zope.org"&gt;&lt;/a&gt;&lt;a href="http://www.zope.org"&gt;Zope&lt;/a&gt;
  developments. Wouah ! &lt;br /&gt;
   &lt;br /&gt;
   I've been using these plugins for couple of weeks and I already can't&lt;br /&gt;
   switch to emacs anymore. I wouldn't have believed It could have ever&lt;br /&gt;
   happened. I've been using emacs for years and somehow refused to try&lt;br /&gt;
   out any IDE for Python because I thought it wasn't as crucial for&lt;br /&gt;
   Python development as for other languages such as Java, C#, C++&lt;br /&gt;
   etc....&lt;br /&gt;
   &lt;br /&gt;
   I love this feeling. I mean when you find out a tool and are
  wondering&lt;br /&gt;
   how you've been living without it for so long that you can't go back
  to&lt;br /&gt;
   the old one :) I'm in this case with emacs. I simply can't&lt;br /&gt;
   anymore. (Well, I could but you see what I mean)&lt;br /&gt;
   &lt;br /&gt;
   Pydev really brings a lot.&amp;nbsp; I was surprised by the progresses made
  by&lt;br /&gt;
   Fabio on the Pydev front and especially what Pydev extensions bring&lt;br /&gt;
   related to code completion.&lt;br /&gt;
   &lt;br /&gt;
   I let you check out the &lt;a
  href="http://showmedo.com/videos/series?name=PyDevEclipseList"&gt;screencasts&lt;/a&gt;
  to get a quick overview if you&lt;br /&gt;
   don't have time to install and play with it (or you are not
  convinced)&lt;br /&gt;
   &lt;br /&gt;
   For Zope development there are some things I'm missing that require&lt;br /&gt;
   some command lines beside Pydev. (Or these are maybe some things I&lt;br /&gt;
   didn't find since I'm relatively new in Pydev development)&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;&amp;nbsp;Support for zope.interface&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This is a bit annoying since pydev doesn't
  recognize&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zope.interface and thus shows errors on
  those classes. I might&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; even dream about a full integration checking
  the Python classes&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; implementing interfaces such as in Java. And
  yeah, I'm still&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dreaming about builtin Python interfaces but
  eh wait ... Python&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; guys don't want that...I need to stop
  dreaming...&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;Support for doctests&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pydev doesn't support doctests. Although,
  you can run external&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; commands from Eclipse. I'm using them to
  specify a zope.testing&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; based tests.py as external command and I get
  back the result in&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the eclipse console. It would be a plus if
  it could directly run&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; them from the Eclipse as doctests as the
  other Pyunit tests.&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;&amp;nbsp;Python specific package browser&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Here, I'm especially talking about the
  refactoring. Move and&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rename you can find in the Java package
  manager. So that you can&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rename module names and don't worry about
  changing the references&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in other Python projects in the workspace.
  Or still move modules&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with the same behavior. It really does ease
  the refactoring in&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Java.&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;Zope server plugin&lt;br /&gt;
   &lt;br /&gt;
   &lt;/li&gt;

   &lt;li&gt;Debugger integrated with Zope&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   &lt;br /&gt;
   To sump up, Pydev and Pydev extensions rock. It's really promising
  and&lt;br /&gt;
   it addresses a huge lack related to Python development.&lt;br /&gt;
   &lt;br /&gt;
   Please don't tell me about other Python specific IDEs since this is&lt;br /&gt;
   not what integrators are expecting. They already do have Eclipse on&lt;br /&gt;
   theirs boxes all over the place so they just want a new Eclipse&lt;br /&gt;
   plugin. (and they are right) Another industry reality. I guess IDE&lt;br /&gt;
   war is over ... as well.&lt;br /&gt;
   &lt;br /&gt;
   I guess Éric is going to like this post ;)&lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_09_15_switching-from-emacs-to-pydev</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_09_15_switching-from-emacs-to-pydev/atom?2006_09_15_switching-from-emacs-to-pydev"
        title="Edit Here - Switching from Emacs to PyDev..." />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">EuroPython 2006 slides  : A Lucene-based cataloging solution for Zope-3 and CPS-3.4</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_07_05_europython-2006-lucene-based-cataloging-solution-for-zope-3-cps-3-4" />
  <issued>2006-07-05T16:02:00Z</issued>
  <modified>2006-07-05T16:02:00Z</modified>
  <created>2006-07-05T15:58:36Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>ZODB</dc:subject>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>ecm</dc:subject>
  
  
    <dc:subject>java</dc:subject>
  
  
    <dc:subject>linux</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>slides</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I am just back from EuroPython where
  I did a presentation about NXLucene
  and the Zope / CPS Platform integration, yesterday
  the 
  4th. You can grab the slides 
  
  here.
  </summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">I am just back from &lt;a href="http://www.europython.org"&gt;EuroPython&lt;/a&gt; where
  I did a presentation about &lt;a
  href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
  and the &lt;a href="http://www.zope.org"&gt;Zope&lt;/a&gt; / &lt;a
  href="http://www.cps-project.org"&gt;CPS&lt;/a&gt; Platform integration, yesterday
  the &lt;a
  href="http://indico.cern.ch/contributionDisplay.py?contribId=24&amp;amp;sessionId=9&amp;amp;confId=44"&gt;
  4th&lt;/a&gt;. You can grab the slides &lt;a
  id="http://www.cps-project.org/sections/projects/nxlucene/europython-2006-lucene"
   name="http://www.cps-project.org/sections/projects/nxlucene/europython-2006-lucene"
   title="http://www.cps-project.org/sections/projects/nxlucene/europython-2006-lucene"&gt;
  &lt;/a&gt;&lt;a
  href="http://www.cps-project.org/sections/projects/nxlucene/europython-2006-lucene"&gt;
  here&lt;/a&gt;.&lt;br /&gt;
  &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_07_05_europython-2006-lucene-based-cataloging-solution-for-zope-3-cps-3-4</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_07_05_europython-2006-lucene-based-cataloging-solution-for-zope-3-cps-3-4/atom?2006_07_05_europython-2006-lucene-based-cataloging-solution-for-zope-3-cps-3-4"
        title="Edit Here - EuroPython 2006 slides  : A Lucene-based cataloging solution for Zope-3 and CPS-3.4" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">EuroPython 2006 : timetable of the conference partially announced</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_06_06_europython-2006-timetable-conference-partially-annonced" />
  <issued>2006-06-06T02:50:04Z</issued>
  <modified>2006-06-06T02:50:04Z</modified>
  <created>2006-06-06T02:36:58Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
   The timetable of EuroPython 2006
  has been partially published yesterday night. You can check it out over t 
  here. 
   
   Nuxeo will be there : 
   
   I will be talking about Lucene-based cataloging solution for Zope-3 and CPS-3.4. on
  thuesday the 4th.  See my recent 
  post related to this. I am really excited to present these pieces of
  software to the Python / Zope ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;br /&gt;
   The timetable of &lt;a href="http://www.europython.org"&gt;EuroPython 2006&lt;/a&gt;
  has been partially published yesterday night. You can check it out over t &lt;a
  href="http://indico.cern.ch/conferenceTimeTable.py?confId=44&amp;amp;showDate=all&amp;amp;showSession=all&amp;amp;detailLevel=contribution&amp;amp;viewMode=parallel"&gt;
  here&lt;/a&gt;. &lt;br /&gt;
   &lt;br /&gt;
   &lt;a href="http://www.nuxeo.com/"&gt;Nuxeo&lt;/a&gt; will be there : &lt;br /&gt;
   &lt;br /&gt;
   I will be talking about &lt;a
  href="http://indico.cern.ch/contributionDisplay.py?contribId=24&amp;amp;sessionId=9&amp;amp;confId=44"
   style=""&gt;Lucene-based cataloging solution for Zope-3 and CPS-3.4.&lt;/a&gt; on
  thuesday the 4th.&amp;nbsp; See my recent &lt;a
  href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_06_02_lucene-based-cataloging-solution-for-zope-3-cps-3-4"&gt;
  post&lt;/a&gt; related to this. I am really excited to present these pieces of
  software to the Python / Zope community ! &lt;br /&gt;
   &lt;a href="http://blogs.nuxeo.com/sections/blogs/tarek_ziade"&gt;Tarek&lt;/a&gt; will
  be talking about &lt;a
  href="http://indico.cern.ch/contributionDisplay.py?contribId=28&amp;amp;sessionId=9&amp;amp;confId=44"
   style=""&gt;CPSBayes :&amp;nbsp; a multipurpose naive bayesian classifier for
  Zope&lt;/a&gt; the same day in the morning.&lt;br /&gt;
   &lt;br /&gt;
   Because of a really busy schedule nowadays at &lt;a
  href="http://www.nuxeo.com"&gt;Nuxeo&lt;/a&gt;, I won't be able to attend the whole
  conference and will be in Switzerland on thuesday only. I will certainly
  attend the &lt;a
  href="http://www.europython.org/sections/events/conference_dinner"&gt;conference
  dinner&lt;/a&gt; in the evening. I will be pleased to meet anyone interested about
  discussing anything related to &lt;a
  href="http://www.python.org"&gt;Python&lt;/a&gt;,&amp;nbsp; &lt;a
  href="http://www.zope.org"&gt;Zope&lt;/a&gt; or &lt;a
  href="http://www.nuxeo.com"&gt;Nuxeo&lt;/a&gt;.&lt;br /&gt;
   &lt;br /&gt;
   See you there !&lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_06_06_europython-2006-timetable-conference-partially-annonced</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_06_06_europython-2006-timetable-conference-partially-annonced/atom?2006_06_06_europython-2006-timetable-conference-partially-annonced"
        title="Edit Here - EuroPython 2006 : timetable of the conference partially announced" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Stéfane just switched to Mac !</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_06_05_stefane-just-switched-to-mac" />
  <issued>2006-06-06T02:50:59Z</issued>
  <modified>2006-06-06T02:50:59Z</modified>
  <created>2006-06-05T13:29:48Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Huge happening today at Nuxeo : Stefane just switched to Mac !
  
  Here is one picture taken in the wild with my phone ;)
   
   

  
   
   
  
  </summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">Huge happening today at Nuxeo : Stefane just switched to Mac !&lt;br /&gt;
  &lt;br /&gt;
  Here is one picture taken in the wild with my phone ;)&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;div align="center"&gt;
   &lt;img style="width: 309px; height: 355px;"
   src="http://www.cps-project.org/workspaces/members/janguenot/sf-with-mac/downloadFile/file/sf_with_mac?nocache=1149515052.83%27%0Awidth=" /&gt;
   &lt;br /&gt;
  &lt;/div&gt;
  &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_06_05_stefane-just-switched-to-mac</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_06_05_stefane-just-switched-to-mac/atom?2006_06_05_stefane-just-switched-to-mac"
        title="Edit Here - Stéfane just switched to Mac !" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Lucene-based cataloging solution for Zope-3 and CPS-3.4</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_06_02_lucene-based-cataloging-solution-for-zope-3-cps-3-4" />
  <issued>2006-11-05T18:34:00Z</issued>
  <modified>2006-11-05T18:34:00Z</modified>
  <created>2006-06-02T15:45:01Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>ZODB</dc:subject>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>ecm</dc:subject>
  
  
    <dc:subject>java</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
   I think it's time to drop a note to the outside world about what I've been
  working on for a little while at Nuxeo. I am pretty confident that this
  project is nowadays at the end of its first iteration. 
   
   This post will give you a short overview of the solution we chose to tackle
  which is the indexing and searching stack in a Zope and CPS architecture. I submitted an 
  ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;br /&gt;
   I think it's time to drop a note to the outside world about what I've been
  working on for a little while at &lt;a
  href="http://www.nuxeo.com/en/"&gt;Nuxeo&lt;/a&gt;. I am pretty confident that this
  project is nowadays at the end of its first iteration. &lt;br /&gt;
   &lt;br /&gt;
   This post will give you a short overview of the solution we chose to tackle
  which is the indexing and searching stack in a &lt;a
  href="http://www.zope.org"&gt;Zope&lt;/a&gt; and &lt;a
  href="http://www.cps-project.org"&gt;CPS&lt;/a&gt; architecture. I submitted an &lt;a
  href="http://www.cps-project.org/sections/projects/nxlucene/europython-2006-proposal"&gt;
  abstract&lt;/a&gt; to &lt;a href="http://www.europython.org"&gt;EuroPython&lt;/a&gt; this
  year. Hopefuly, I'll have the chance to give you more technical details at
  the conference in July.&lt;br /&gt;
   

  &lt;h2&gt;Motivations&lt;/h2&gt;
  &lt;br /&gt;
   &lt;a href="http://www.cps-project.org"&gt;CPS&lt;/a&gt; is based on &lt;a
  href="http://www.zope.org"&gt;Zope&lt;/a&gt; and the standard cataloging solution of
  &lt;a href="http://www.zope.org"&gt;Zope&lt;/a&gt;, nowadays, is the &lt;a
  href="http://www.zope.org/Documentation/How-To/ZCatalogTutorial"&gt;ZCatalog&lt;/a&gt;.
  The &lt;a
  href="http://www.zope.org/Documentation/How-To/ZCatalogTutorial"&gt;ZCatalog&lt;/a&gt;
  works really well until a certain amount of indexed documents : that's a
  fact. As well, &lt;a
  href="http://www.zope.org/Documentation/How-To/ZCatalogTutorial"&gt;ZCatalog&lt;/a&gt;
  extensions, such as &lt;a
  href="http://opensource.zopyx.biz/OpenSource/TextIndexNG3"&gt;TextIndexNG&lt;/a&gt;,
  are of a great interest. &lt;br /&gt;
   &lt;br /&gt;
   But, because there is a &lt;i&gt;but&lt;/i&gt;,&amp;nbsp; the main problem is that &lt;a
  href="http://www.zope.org"&gt;Zope&lt;/a&gt; is dealing with a task it shouldn't have
  to deal with. As a result, it decreases the overall performances of the &lt;a
  href="http://www.zope.org"&gt;Zope&lt;/a&gt; platform itself. If you are not
  convinced just try out to inject 200k documents within a &lt;a
  href="http://www.zope.org"&gt;Zope&lt;/a&gt; instance (or a &lt;a
  href="http://www.plone.org"&gt;Plone&lt;/a&gt; one if you wish :)) with documents
  having 50 fields to be indexed and check how your response time is evolving
  when your instance is as much used by people working and writing within the
  database and by others consulting it and thus searching all along. In &lt;a
  href="http://www.nuxeo.com/"&gt;Nuxeo&lt;/a&gt;, we tried on large scale projects. It
  simply doesn't work well/fast enough for serious deployments. &lt;a
  href="http://www.zope.org"&gt;Zope&lt;/a&gt; gets really slow...&lt;br /&gt;
   &lt;br /&gt;
   Anyways, you should consider the &lt;a
  href="http://www.zope.org/Documentation/How-To/ZCatalogTutorial"&gt;ZCatalog&lt;/a&gt;
  as what it is : a hack on top of the &lt;a
  href="http://dev.zope.org/ZODB"&gt;ZODB&lt;/a&gt; because the &lt;a
  href="http://dev.zope.org/ZODB"&gt;ZODB&lt;/a&gt; doesn't provide any native query
  language nor full indexing suppport. &lt;br /&gt;
   &lt;br /&gt;
   For those reasons, we needed such a solution for our &lt;a
  href="http://www.nuxeo.com/en/customers/"&gt;customer&lt;/a&gt; projects.&lt;br /&gt;
   &lt;br /&gt;
   As well, this is following our vision of &lt;a
  href="http://dev.zope.org/Zope3/"&gt;Zope3&lt;/a&gt; being an integration platform
  for &lt;a href="http://www.nuxeo.com/en/ecm/"&gt;ECM&lt;/a&gt; applications where
  external services could be plugged in thanks to the &lt;a
  href="http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/ComponentArchitectureSimplification"&gt;
  Zope3 component architecture&lt;/a&gt; flexibility and the agility of the &lt;a
  href="http://www.python.org"&gt;Python&lt;/a&gt; language.&lt;br /&gt;
   

  &lt;h2&gt;What is Lucene ?&lt;br /&gt;
  &lt;/h2&gt;

  &lt;div align="left"&gt;
   &lt;br /&gt;
    &lt;a href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; is an open source
   project from the &lt;a href="http://apache.org/"&gt;Apache Software
   Foundation&lt;/a&gt; written in &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt;. This is
   a high-performance, full-featured text search engine library.&lt;br /&gt;
   &lt;br /&gt;
    I would suggest that you check the &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;website&lt;/a&gt; that contains a lot
   of useful information and documentation. As well, I would really recommand
   &lt;a href="http://lucenebook.com/"&gt;this book&lt;/a&gt; to anyone interested in
   working with &lt;a href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; and /
   or in understanding more deeply how it works and how to use it in a proper
   way. As well, some projects such as &lt;a
   href="http://lucene.apache.org/nutch/"&gt;nutch&lt;/a&gt; are described as case
   studies which is more than interesting for anyone who wants to build a
   system on top of &lt;a href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt;
   since the best practices are described within those case studies.&lt;br /&gt;
   &lt;br /&gt;
    &amp;nbsp;In &lt;a href="http://www.nuxeo.com"&gt;Nuxeo&lt;/a&gt;, we first integrated &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; for a customer within
   the &lt;a href="http://apogee.nuxeo.org"&gt;Apogee project scope&lt;/a&gt;. (&lt;a
   href="http://apogee.nuxeo.org"&gt;Apogee&lt;/a&gt; is a framework based on &lt;a
   href="http://www.eclipse.org/rcp/"&gt;Eclipse RCP&lt;/a&gt; for &lt;a
   href="http://www.nuxeo.com/en/ecm/"&gt;ECM&lt;/a&gt; rich client applications). Its
   use had been a real success so we decided to go further and see how we
   could leverage the use of &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; server side.&lt;br /&gt;
    

   &lt;h2&gt;What is PyLucene ?&lt;br /&gt;
   &lt;/h2&gt;
   &lt;br /&gt;
    The first time we've seriously considered using &lt;a
   href="http://pylucene.osafoundation.org/"&gt;PyLucene&lt;/a&gt; was at last year's
   &lt;a href="http://www.europython.org"&gt;EuroPython&lt;/a&gt; conference after &lt;a
   href="http://wp.osafoundation.org/author/vajda/"&gt;Andi Vajda&lt;/a&gt;'s really
   great presentation of &lt;a
   href="http://pylucene.osafoundation.org/"&gt;PyLucene&lt;/a&gt;. &lt;a
   href="http://wp.osafoundation.org/author/vajda/"&gt;Andi&lt;/a&gt; is the actual
   main &lt;a href="http://pylucene.osafoundation.org/"&gt;PyLucene&lt;/a&gt; developer.
   &lt;a href="http://pylucene.osafoundation.org/"&gt;PyLucene&lt;/a&gt; is maintained by
   the &lt;a href="http://www.osafoundation.org"&gt;Open Source Applications
   Foundation.&lt;/a&gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;a href="http://pylucene.osafoundation.org/"&gt;PyLucene&lt;/a&gt; is a &lt;a
   href="http://gcc.gnu.org/java/"&gt;GCJ&lt;/a&gt;-compiled version of &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Java&lt;/a&gt; &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; integrated with &lt;a
   href="http://www.python.org"&gt;Python&lt;/a&gt;. Its goal is to allow the use of &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt;'s text indexing and
   searching capabilities from &lt;a href="http://www.python.org"&gt;Python&lt;/a&gt;. It
   is designed to be API compatible with the latest version of &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Java&lt;/a&gt; &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt;.&lt;br /&gt;
   &lt;br /&gt;
    &lt;a href="http://pylucene.osafoundation.org/"&gt;PyLucene&lt;/a&gt; is freaking fast
   ! Even faster than the &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Java&lt;/a&gt; &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; version according to
   the authors of the &lt;i&gt;&lt;a href="http://lucenebook.com/"&gt;Lucene In
   Action&lt;/a&gt;&lt;/i&gt; &lt;a href="http://lucenebook.com/"&gt;book&lt;/a&gt;. Furthermore, It
   will be easily synchronized with the latest &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Java&lt;/a&gt; &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; releases since this
   is not a &lt;i&gt;from scratch&lt;/i&gt; port but a &lt;a
   href="http://gcc.gnu.org/java/"&gt;GCJ&lt;/a&gt;-compiled version of &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Java&lt;/a&gt; &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; itself.&lt;br /&gt;
  &lt;/div&gt;

  &lt;h2&gt;NXLucene : standalone Lucene indexation server&lt;br /&gt;
  &lt;/h2&gt;

  &lt;div align="left"&gt;
   &lt;br /&gt;
    &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   is a standalone multi-threaded remote server handling &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; stores. It takes
   advantage of the freaking fast &lt;a
   href="http://pylucene.osafoundation.org/"&gt;PyLucene&lt;/a&gt; &lt;a
   href="http://www.python.org"&gt;Python&lt;/a&gt; bindings and uses &lt;a
   href="http://twistedmatrix.com/trac/"&gt;Twisted&lt;/a&gt; for its server
   implementation. It uses some part of the &lt;a
   href="http://dev.zope.org/Zope3"&gt;Zope3 component architecture&lt;/a&gt; as well.
   &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   currently supports the &lt;a href="http://www.xmlrpc.com/"&gt;XML-RPC&lt;/a&gt;
   protocol. (Its roadmap includes an &lt;a
   href="http://www.zeroc.com/ice.html"&gt;ICE&lt;/a&gt; connector for the 1.x branch.)
   As well, &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   might be seen as a good example of what could be achieved using the best
   parts of different worlds (Java &lt;a
   href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; , &lt;a
   href="http://pylucene.osafoundation.org/"&gt;PyLucene&lt;/a&gt;, &lt;a
   href="http://dev.zope.org/Zope3"&gt;Zope3&lt;/a&gt;, &lt;a
   href="http://twistedmatrix.com/trac/"&gt;Twisted&lt;/a&gt;,...). Bear in mind, that
   &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   is not running on top of the &lt;a href="http://www.zope.org"&gt;Zope AS&lt;/a&gt;. It
   is &lt;b&gt;standlone.&lt;/b&gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   exposes an XML query language for indexing and searching operations. Note
   the &lt;a href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; native search
   query is of course still supported. Check the &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene/nxlucene-api/viewZip/file/NXLucene-0.7.0-1.zip/api/private/index.html"&gt;
   interfaces&lt;/a&gt;&lt;br /&gt;
   &lt;br /&gt;
    While installing &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;,
   you will install as well the core libs that might be used by third party &lt;a
   href="http://www.python.org"&gt;Python&lt;/a&gt; programs. For instance, the query
   lib might be useful to help you format your &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   XML queries or still the testing library might be really helpful to write
   tests for your &lt;a href="http://www.python.org"&gt;Python&lt;/a&gt; components that
   need to communicate with an &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   server.&lt;br /&gt;
   &lt;br /&gt;
    This is important to note here that you can request &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   using any language. You will only need an &lt;a
   href="http://www.xmlrpc.com/"&gt;XML-RPC&lt;/a&gt; client library to do so.&lt;br /&gt;
   &lt;br /&gt;
    &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   is an open source project under the &lt;a
   href="http://www.gnu.org/licenses/lgpl.html"&gt;LGPL&lt;/a&gt; part of the &lt;a
   href="http://www.cps-project.org/"&gt;CPS platform&lt;/a&gt; project.&lt;br /&gt;
   &lt;br /&gt;
    For more information about &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   and its installation you may check the &lt;a
   href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
   website.&lt;br /&gt;
  &lt;/div&gt;

  &lt;h2&gt;nuxeo.lucene : Zope 3 cataloging component&lt;br /&gt;
  &lt;/h2&gt;
  &lt;br /&gt;
   &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/Zope3/nuxeo.lucene/trunk"&gt;nuxeo.lucene&lt;/a&gt;
  is a cataloging component written on top of to th&lt;a
  href="http://dev.zope.org/Zope3"&gt;e Zope3 application server&lt;/a&gt; currently
  offering an &lt;a href="http://www.xmlrpc.com/"&gt;XML-RPC&lt;/a&gt; proxy to a &lt;a
  href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;
  remote server. As well, It offers an abstraction for &lt;a
  href="http://www.python.org"&gt;Python&lt;/a&gt; objects cataloging strategy
  providing the ability to specify how &lt;a
  href="http://www.python.org"&gt;Python&lt;/a&gt; objects should be indexed and
  retrieved from a &lt;a href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt;
  store through &lt;a
  href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;.
  (This is important to note here, that whatever remote server providing an &lt;a
  href="http://www.xmlrpc.com/"&gt;XML-RPC&lt;/a&gt; remote interface on a &lt;a
  href="http://lucene.apache.org/java/docs/"&gt;Lucene&lt;/a&gt; server could be
  theoretically used.)&lt;br /&gt;
   &lt;br /&gt;
   Currently, this component is used through &lt;a
  href="http://codespeak.net/z3/five/"&gt;Five&lt;/a&gt; from &lt;a
  href="http://www.cps-project.org"&gt;CPS&lt;/a&gt;. Its integration on top of the &lt;a
  href="http://dev.zope.org/Zope3"&gt;Zope3 AS&lt;/a&gt; is not finished since we
  didn't need &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/Zope3/nuxeo.lucene/trunk"&gt;nuxeo.lucene&lt;/a&gt;
  outside of &lt;a href="http://www.cps-project.org/"&gt;CPS&lt;/a&gt; yet. Feel free to
  &lt;a href="http://lists.nuxeo.com"&gt;participate&lt;/a&gt; to its development if you
  are interested about having &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/Zope3/nuxeo.lucene/trunk"&gt;nuxeo.lucene&lt;/a&gt;
  fully integrated on top of a stock &lt;a href="http://dev.zope.org/Zope3"&gt;Zope3
  AS&lt;/a&gt;.&lt;br /&gt;
   &lt;br /&gt;
   &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/Zope3/nuxeo.lucene/trunk"&gt;nuxeo.lucene&lt;/a&gt;
  is an open source project available under the &lt;a
  href="http://www.zope.org/Resources/License/"&gt;ZPL part of the&lt;/a&gt; &lt;a
  href="http://www.cps-project.org/"&gt;CPS platform&lt;/a&gt; project.&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;h2&gt;CPSLuceneCatalog : CMF Catalog replacement for CPS-3. &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/CPS3/products/CPSLuceneCatalog/trunk"&gt;
  4&lt;br /&gt;
  &lt;/a&gt;&lt;/h2&gt;
  &lt;br /&gt;
   &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/CPS3/products/CPSLuceneCatalog/trunk"&gt;
  CPSLuceneCatalog&lt;/a&gt; is a &lt;a
  href="http://www.cps-project.org/sections/about"&gt;CPS-3.4.x&lt;/a&gt; specific
  product adding the &lt;a href="http://www.cps-project.org"&gt;CPS&lt;/a&gt; specific
  business rules to &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/Zope3/nuxeo.lucene/trunk"&gt;nuxeo.lucene&lt;/a&gt;.
  For example, it takes care of the way different versions of &lt;a
  href="http://www.cps-project.org/"&gt;CPS&lt;/a&gt; documents should be indexed. &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/CPS3/products/CPSLuceneCatalog/trunk"&gt;
  CPSLuceneCatalog&lt;/a&gt; is a complete substitute for the &lt;a
  href="http://www.zope.org/Documentation/How-To/ZCatalogTutorial"&gt;ZCatalog&lt;/a&gt;
  that is showing its limits while dealing with millions of objects. &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/CPS3/products/CPSLuceneCatalog/trunk"&gt;
  CPSLuceneCatalog&lt;/a&gt; will be shipped along with the next major release of &lt;a
  href="http://www.cps-project.org/"&gt;CPS&lt;/a&gt;, version 4, along with the &lt;a
  href="http://jackrabbit.apache.org/"&gt;JackRabbit JCR repository&lt;/a&gt;.&lt;br /&gt;
   &lt;br /&gt;
   &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/CPS3/products/CPSLuceneCatalog/trunk"&gt;
  CPSLuceneCatalog&lt;/a&gt; is almost fully backward compatible with the &lt;a
  href="http://www.zope.org/Documentation/How-To/ZCatalogTutorial"&gt;ZCatalog&lt;/a&gt;
  query syntax so be sure you code won't break if you want to migrate. I don't
  currently support 100% compatibility but I do support at least the subset of
  &lt;a
  href="http://www.zope.org/Documentation/How-To/ZCatalogTutorial"&gt;ZCatalog&lt;/a&gt;
  query syntax we have been using in &lt;a
  href="http://www.cps-project.org"&gt;CPS&lt;/a&gt; internals.&lt;br /&gt;
   &lt;br /&gt;
   An upgrade step is already available on &lt;a
  href="http://www.cps-project.org"&gt;CPS&lt;/a&gt; 3.4.x instances.&lt;br /&gt;
   &lt;br /&gt;
   &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/CPS3/products/CPSLuceneCatalog/trunk"&gt;
  CPSLuceneCatalog&lt;/a&gt; is an open source project available under the &lt;a
  href="http://www.gnu.org/copyleft/gpl.html"&gt;GPL&lt;/a&gt; &lt;span
  style="text-decoration: underline;"&gt;part of the&lt;/span&gt; &lt;a
  href="http://www.cps-project.org/"&gt;CPS platform&lt;/a&gt; project.&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;h2&gt;Already significant results !&lt;br /&gt;
  &lt;/h2&gt;
  &lt;br /&gt;
   The result is a big win on large scale deployments :&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;Indexing and searching are much faster and scalable compared to &lt;a
   href="http://www.zope.org/Documentation/How-To/ZCatalogTutorial"&gt;ZCatalog&lt;/a&gt;.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
   &lt;li&gt;Indexing and searching are much more powerful compared to &lt;a
   href="http://www.zope.org/Documentation/How-To/ZCatalogTutorial"&gt;ZCatalog&lt;/a&gt;
   (Analysis, ranking, etc...)&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
   &lt;li&gt;&lt;a href="http://www.zope.org"&gt;Zope&lt;/a&gt; global performances are
   increased because &lt;a href="http://www.zope.org"&gt;Zope&lt;/a&gt; no longer deals
   with the indexing and searching business.&lt;/li&gt;

   &lt;li
   style="list-style-type: none; list-style-image: none; list-style-position: outside;"&gt;
   &lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;Looking for support ?&lt;/h2&gt;
  If you are looking for any technical information or help regarding these
  products please subscribe to the &lt;a
  href="http://lists.nuxeo.com/mailman/listinfo/cps-devel"&gt;CPS devel mailing
  list&lt;/a&gt;&lt;a href="http://lists.nuxeo.com/mailman/listinfo/cps-devel"&gt;.&lt;/a&gt;
  &lt;br /&gt;
   &lt;br /&gt;
   If you are looking for commercial support, &lt;a
  href="http://www.nuxeo.com"&gt;Nuxeo&lt;/a&gt; &lt;a
  href="http://www.nuxeo.com/en/services/"&gt;provides professional services&lt;/a&gt;
  whatever your needs are.&lt;br /&gt;
   &lt;br /&gt;
   &lt;a href="http://www.nuxeo.com"&gt;Nuxeo&lt;/a&gt; is currently maintaining &lt;a
  href="http://www.cps-project.org/sections/projects/nxlucene"&gt;NXLucene&lt;/a&gt;,
  &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/Zope3/nuxeo.lucene/trunk"&gt;nuxeo.lucene&lt;/a&gt;
  and&amp;nbsp; &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/CPS3/products/CPSLuceneCatalog/trunk"&gt;
  CPSLuceneCatalog&lt;/a&gt; and we are always welcoming third-party contributors.
  As a developer, if you are interested about contributing to these projects,
  we will grant you access to our &lt;a href="http://svn.nuxeo.org"&gt;svn
  repositories&lt;/a&gt; and provide you all the information you need in order to
  get started. Just subscribe to the &lt;a
  href="http://lists.nuxeo.com/mailman/listinfo/cps-devel"&gt;CPS devel mailing
  list&lt;/a&gt;.&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;h2&gt;Thanks&lt;br /&gt;
  &lt;/h2&gt;
  &lt;br /&gt;
   A big thanks to our &lt;a
  href="http://www.nuxeo.com/en/customers/"&gt;customers&lt;/a&gt; at Nuxeo for
  trusting us, being patient and for always bringing along with, their
  projects, bleeding edge use cases.&lt;br /&gt;
   &lt;br /&gt;
   And don't forget, at &lt;a href="http://www.nuxeo.com"&gt;Nuxeo&lt;/a&gt; we love
  challenge and innovation !&lt;br /&gt;
   &lt;br /&gt;
   Hope you'll enjoy those components as much as I enjoyed writing them for
  our &lt;a href="http://www.nuxeo.com/en/customers/"&gt;customers&lt;/a&gt;. Looking
  forward to hearing from you.&lt;br /&gt;
   &lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; J.&lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_06_02_lucene-based-cataloging-solution-for-zope-3-cps-3-4</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_06_02_lucene-based-cataloging-solution-for-zope-3-cps-3-4/atom?2006_06_02_lucene-based-cataloging-solution-for-zope-3-cps-3-4"
        title="Edit Here - Lucene-based cataloging solution for Zope-3 and CPS-3.4" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Slides of my Zope3 talk at the www2006 in Edinburgh</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_05_31_www2006-slides-from-my-zope3-talk" />
  <issued>2006-05-31T23:41:33Z</issued>
  <modified>2006-05-31T23:41:33Z</modified>
  <created>2006-05-31T12:51:12Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>ZODB</dc:subject>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>ecm</dc:subject>
  
  
    <dc:subject>erp5</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>slides</dc:subject>
  
  
    <dc:subject>web</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">You can find 
  here the slides of the Zope 3 talk I gave
  last friday at the www2006.
   
   The talk went well. (The time they gave me was a little shorter than I
  would have expected though). This was the last day of the conference thus,
  as always during conferences, lots of people had already left the place.
   
   I was surprised to find a room with lots of people knowing Zope2 ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">You can find &lt;a
  href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/www2006_zope3.pdf"&gt;
  here&lt;/a&gt; the slides of the &lt;a
  href="http://www2006.org/programme/item.php?id=d27"&gt;Zope 3 talk&lt;/a&gt; I gave
  last friday at the &lt;a href="http://www2006.org/"&gt;www2006.&lt;/a&gt;&lt;br /&gt;
   &lt;br /&gt;
   The talk went well. (The time they gave me was a little shorter than I
  would have expected though). This was the last day of the conference thus,
  as always during conferences, lots of people had already left the place.&lt;br /&gt;
   &lt;br /&gt;
   I was surprised to find a room with lots of people knowing &lt;a
  href="http://www.zope.org"&gt;Zope2&lt;/a&gt; (or at least people who had tried &lt;a
  href="http://www.zope.org"&gt;Zope2&lt;/a&gt; couple of years ago). The bad news was that they seemed &lt;b&gt;not&lt;/b&gt; to like &lt;a
  href="http://www.zope.org"&gt;it&lt;/a&gt;... (Actually, like a lot of people
  outside of the &lt;a href="http://www.zope.org"&gt;Zope&lt;/a&gt; world). Arguments are
  always the same, too monolitic, too complex , not enough following standards
  etc... &lt;br /&gt;
   &lt;br /&gt;
   I guess I succeeded to excite their curiosity with &lt;a
  href="http://dev.zope.org/Zope3"&gt;Zope3&lt;/a&gt; and the way it's been designed to
  especially tackle the issues they had previously with &lt;a
  href="http://www.zope.org"&gt;Zope2&lt;/a&gt;. They really loved the doctests
  :)&lt;br /&gt;
   &lt;br /&gt;
   The &lt;a href="http://www2006.org"&gt;www2006&lt;/a&gt; conference is about the Web in
  general right :). So basically, I found there lots of people excited about
  Web 2.0, AJAX and all browser related technologies. Of course, I can see the
  advantages of those technologies but I have to say I don't think I'm
  a  Web guy at heart. I would always rather work server side or with
  real desktop applications myself :)&lt;br /&gt;
   &lt;br /&gt;
   Edinburgh is a nice big village. People were really nice (and they do have
  a really cool English accent ;)).  The only problem with small cities
  is for instance when you would like to eat after 10 P.M... Kudos to the
  Indian restaurant next to the hotel for serving me food when I arrived from
  the airport even if they were about to close when I came in...&lt;br /&gt;
   &lt;br /&gt;
   I didn't spend a lot of time in Edinburgh since I went to London on Friday
  evening.&lt;br /&gt;
   &lt;br /&gt;
  Here it is for this small report about the conference.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_05_31_www2006-slides-from-my-zope3-talk</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_05_31_www2006-slides-from-my-zope3-talk/atom?2006_05_31_www2006-slides-from-my-zope3-talk"
        title="Edit Here - Slides of my Zope3 talk at the www2006 in Edinburgh" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Dump and load foreign subversion repositories using svnadmin and svndumpfilter</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_04_21_dump-load-svn-repositories-using-svnadmin-svndumpfilter" />
  <issued>2006-04-21T02:48:10Z</issued>
  <modified>2006-04-21T02:48:10Z</modified>
  <created>2006-04-21T01:48:36Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>coding</dc:subject>
  
  
    <dc:subject>linux</dc:subject>
  
  
  <summary type="text/html" mode="escaped">What for ?
  
   This is mostly a reminder for mysef about the way of dumping and loading subversion repositories.
   
   Let's say I have two subversion
  repositories. repoA and repoB. I got a component called
  P at the root of repoA as below :

repoA /
          P /
             trunk /
             branches /
             tags /

  What I'd like todo is to copy P from repoA to ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;h3&gt;What for ?&lt;/h3&gt;
  &lt;br /&gt;
   This is mostly a reminder for mysef about the way of dumping and loading &lt;a
  href="http://subversion.tigris.org/"&gt;subversion&lt;/a&gt; repositories.&lt;br /&gt;
   &lt;br /&gt;
   Let's say I have two &lt;a href="http://subversion.tigris.org/"&gt;subversion&lt;/a&gt;
  repositories. &lt;i&gt;repoA&lt;/i&gt; and &lt;i&gt;repoB&lt;/i&gt;. I got a component called
  &lt;i&gt;P&lt;/i&gt; at the root of &lt;i&gt;repoA&lt;/i&gt; as below :&lt;br /&gt;
&lt;pre&gt;
repoA /&lt;br /&gt;
          P /&lt;br /&gt;
             trunk /&lt;br /&gt;
             branches /&lt;br /&gt;
             tags /
&lt;/pre&gt;
  What I'd like todo is to copy &lt;i&gt;P&lt;/i&gt; from &lt;i&gt;repoA&lt;/i&gt; to &lt;i&gt;repoB&lt;/i&gt;
  preserving all the history logs for &lt;i&gt;P&lt;/i&gt;.&lt;br /&gt;
   

  &lt;h3&gt;Dumping the repository&lt;/h3&gt;
  &lt;br /&gt;
   Let's say I started the developement of &lt;i&gt;P&lt;/i&gt; with revision 28000 and my
  last checkin related to &lt;i&gt;P&lt;/i&gt; is at revision 38000. The revision numbers
  are important because it will decrease the needed time to dump the actual
  svn repository. Less revisions to dump means less time needed :)&lt;br /&gt;
   &lt;br /&gt;
  We will use &lt;a
  href="http://svnbook.red-bean.com/en/1.0/ch09s02.html"&gt;svnadmin&lt;/a&gt; to do
  that.&lt;br /&gt;
  &lt;br /&gt;
   Go on the server hosting the &lt;a
  href="http://subversion.tigris.org/"&gt;subversion&lt;/a&gt; repository and dump it
  this way&amp;nbsp; :&lt;br /&gt;
&lt;pre&gt;
$ svnadmin dump --quiet --revision 28000:38000 /home/svn/repoA &amp;gt; repoA.dump&lt;br /&gt;
&lt;/pre&gt;
  This operation can last a while depending on the size of your
  repository.&lt;br /&gt;
   &lt;br /&gt;
   &lt;i&gt;&lt;a href="http://svnbook.red-bean.com/en/1.0/ch09s02.html"&gt;svnadmin&lt;/a&gt;
  dump options :&lt;/i&gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;pre&gt;
$ svnadmin dump --help&lt;br /&gt;
dump: usage: svnadmin dump REPOS_PATH [-r LOWER[:UPPER] ] [--incremental]&lt;br /&gt;
&lt;br /&gt;
Dump the contents of filesystem to stdout in a 'dumpfile'&lt;br /&gt;
portable format, sending feedback to stderr.  Dump revisions&lt;br /&gt;
LOWER rev through UPPER rev.  If no revisions are given, dump all&lt;br /&gt;
revision trees.  If only LOWER is given, dump that one revision tree.&lt;br /&gt;
If --incremental is passed, then the first revision dumped will be&lt;br /&gt;
a diff against the previous revision, instead of the usual fulltext.&lt;br /&gt;
&lt;br /&gt;
Valid options:&lt;br /&gt;
  -r [--revision] arg      : specify revision number ARG (or X:Y range)&lt;br /&gt;
  --incremental            : dump incrementally&lt;br /&gt;
  --deltas                 : use deltas in dump output&lt;br /&gt;
  -q [--quiet]             : no progress (only errors) to stderr
&lt;/pre&gt;
  &lt;br /&gt;
   

  &lt;h3&gt;Filtering P component from repoA's dump&lt;/h3&gt;
  &lt;br /&gt;
   What we are interested in here is only component &lt;i&gt;P&lt;/i&gt;. We need to
  filter out for &lt;i&gt;P&lt;/i&gt; component. We will use &lt;a
  href="http://svnbook.red-bean.com/en/1.0/ch05s03.html"&gt;svndumpfilter&lt;/a&gt; to
  do that.&lt;br /&gt;
&lt;pre&gt;
$ cat repoA.dump | svndumpfilter include P &amp;gt; P.dump&lt;br /&gt;
&lt;/pre&gt;
  &lt;i&gt;&lt;a
  href="http://svnbook.red-bean.com/en/1.0/ch05s03.html"&gt;svndumpfilter&lt;/a&gt;
  options&amp;nbsp; :&lt;/i&gt;&lt;br /&gt;
&lt;pre&gt;
$ svndumpfilter --help&lt;br /&gt;
general usage: svndumpfilter SUBCOMMAND [ARGS &amp;amp; OPTIONS ...]&lt;br /&gt;
Type 'svndumpfilter help &amp;lt;subcommand&amp;gt;' for help on a specific subcommand.&lt;br /&gt;
&lt;br /&gt;
Available subcommands:&lt;br /&gt;
   exclude&lt;br /&gt;
   include&lt;br /&gt;
   help (?, h)
&lt;/pre&gt;

  &lt;h3&gt;Loading back P dump to repoB&lt;/h3&gt;
  &lt;br /&gt;
   Now go on the server hosting &lt;i&gt;repoB.&lt;/i&gt; Before that, transfer you&lt;i&gt;r
  P.dump&lt;/i&gt; to this server. We will use &lt;a
  href="http://svnbook.red-bean.com/en/1.0/ch09s02.html"&gt;svnadmin&lt;/a&gt; to load
  it back&lt;br /&gt;
   &lt;br /&gt;
&lt;pre&gt;
$ svnadmin load --quiet /home/svn/repoB &amp;lt; P.dump&lt;br /&gt;
&lt;/pre&gt;
  &lt;i&gt;&lt;a href="http://svnbook.red-bean.com/en/1.0/ch09s02.html"&gt;svnadmin&lt;/a&gt;
  load options :&lt;br /&gt;
  &lt;/i&gt; 
&lt;pre&gt;
$ svnadmin load --help&lt;br /&gt;
load: usage: svnadmin load REPOS_PATH&lt;br /&gt;
Read a 'dumpfile'-formatted stream from stdin, committing&lt;br /&gt;
new revisions into the repository's filesystem.  If the repository&lt;br /&gt;
was previously empty, its UUID will, by default, be changed to the&lt;br /&gt;
one specified in the stream.  Progress feedback is sent to stdout.&lt;br /&gt;
Valid options:&lt;br /&gt;
  -q [--quiet]             : no progress (only errors) to stderr&lt;br /&gt;
  --ignore-uuid            : ignore any repos UUID found in the stream&lt;br /&gt;
  --force-uuid             : set repos UUID to that found in stream, if any&lt;br /&gt;
  --use-pre-commit-hook    : call pre-commit hook before committing revisions&lt;br /&gt;
  --use-post-commit-hook   : call post-commit hook after committing revisions&lt;br /&gt;
  --parent-dir arg         : load at specified directory in repository
&lt;/pre&gt;
  Here we are. You just need to remove &lt;i&gt;P&lt;/i&gt; from &lt;i&gt;repoA&lt;/i&gt; &lt;br /&gt;
&lt;pre&gt;
$ svn remove http://svn.foo.com/repoA/P&lt;br /&gt;
&lt;/pre&gt;
  Of course, what would be really cool, instead of the dump/load&lt;br /&gt;
   operations, would be something like that being possible in between foreign
  repositories&lt;br /&gt;
&lt;pre&gt;
$ svn move https://svn.foo.com/repoA/P https://svn.foo.com/repoB/&lt;br /&gt;
&lt;/pre&gt;

  &lt;p&gt;Thanks &lt;a
  href="http://blogs.nuxeo.com/sections/blogs/florent_guillaume"&gt;Florent&lt;/a&gt;
  for the pointers.&lt;br /&gt;
  &lt;/p&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_04_21_dump-load-svn-repositories-using-svnadmin-svndumpfilter</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_04_21_dump-load-svn-repositories-using-svnadmin-svndumpfilter/atom?2006_04_21_dump-load-svn-repositories-using-svnadmin-svndumpfilter"
        title="Edit Here - Dump and load foreign subversion repositories using svnadmin and svndumpfilter" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Zope3 talk at the 15th World Wide Web international conference</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_04_06_zope3-talk-at-15th-world-wide-web-international-conference" />
  <issued>2006-04-06T11:56:37Z</issued>
  <modified>2006-04-06T11:56:37Z</modified>
  <created>2006-04-06T11:43:45Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>web</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">I will be giving a a technical presentation of the Zope3 component architecture at the www2006 conference. This is the 15th international World Wide Web Conferene
  and it will take place in Edinburgh (Scotland) in May this year.
  
  The talk I will be giving is entitled : "Mutliparadigm
  application development with the Zope3 component architecture" and it
  will be part of the ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">I will be giving a a technical presentation of the &lt;a
  href="http://dev.zope.org/Zope3"&gt;Zope3 component architecture&lt;/a&gt; at the &lt;a
  href="http://www2006.org/"&gt;www2006&lt;/a&gt; conference. This is the &lt;a
  href="http://www2006.org/"&gt;15th international World Wide Web Conferene&lt;/a&gt;
  and it will take place in Edinburgh (Scotland) in May this year.&lt;br /&gt;
  &lt;br /&gt;
  The talk I will be giving is entitled : &lt;a
  href="http://www2006.org/programme/paper.php?id=d27"&gt;"Mutliparadigm
  application development with the Zope3 component architecture"&lt;/a&gt; and it
  will be part of the &lt;a href="http://www2006.org/developers/"&gt;developers
  track&lt;/a&gt; at the conference.&lt;br /&gt;
  &lt;br /&gt;
  This will be a really a good occasion to introduce &lt;a
  href="http://dev.zope.org/Zope3"&gt;Zope3&lt;/a&gt; to developers from the major
  industry players out there (Microsoft, IBM, Yahoo, Oracle, Nokia,
  etc...).&amp;nbsp; &lt;br /&gt;
  &lt;br /&gt;
  They are asking people to &lt;a href="http://www2006.org/developers/"&gt;email&lt;/a&gt;
  the track chairs if you see listed tracks that are of particular interest for
  you. So if you are using or making business out of &lt;a
  href="http://www.zope.org"&gt;Zope&lt;/a&gt; do not hesitate to &lt;a
  href="http://www2006.org/developers/"&gt;email&lt;/a&gt; them saying you think
  scheduling a &lt;a href="http://dev.zope.org/Zope3"&gt;Zope3&lt;/a&gt; talk was a really
  good idea :)&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_04_06_zope3-talk-at-15th-world-wide-web-international-conference</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_04_06_zope3-talk-at-15th-world-wide-web-international-conference/atom?2006_04_06_zope3-talk-at-15th-world-wide-web-international-conference"
        title="Edit Here - Zope3 talk at the 15th World Wide Web international conference" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">ElementTree, serialization and namespace prefixes</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_02_23_elementtree-serialization-namespace-prefixes" />
  <issued>2006-02-27T15:30:19Z</issued>
  <modified>2006-02-27T15:30:19Z</modified>
  <created>2006-02-23T14:42:11Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>coding</dc:subject>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
  <summary type="text/html" mode="escaped">The way ElementTree
  outputs namespaces in serialized output can be a problem with some
  applications.
   
   Here is an example of such an ouput :

  &amp;gt;&amp;gt;&amp;gt; import cElementTree as etree
  &amp;gt;&amp;gt;&amp;gt; stream = """&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;
  ... &amp;lt;doc xmlns="http://bar"
  ...      xmlns:foo="http://foo/"&amp;gt;
  ...   &amp;lt;foo:sub/&amp;gt;
  ... &amp;lt;/doc&amp;gt;""
  ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">The way &lt;a href="http://effbot.org/zone/element-index.htm"&gt;ElementTree&lt;/a&gt;
  outputs namespaces in serialized output can be a problem with some
  applications.&lt;br /&gt;
   &lt;br /&gt;
   Here is an example of such an ouput :&lt;br /&gt;
&lt;pre&gt;
  &amp;gt;&amp;gt;&amp;gt; import cElementTree as etree&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; stream = """&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;
  ... &amp;lt;doc xmlns="http://bar"&lt;br /&gt;
  ...      xmlns:foo="http://foo/"&amp;gt;&lt;br /&gt;
  ...   &amp;lt;foo:sub/&amp;gt;&lt;br /&gt;
  ... &amp;lt;/doc&amp;gt;""&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; doc = etree.XML(stream)&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; print etree.tostring(doc, encoding="UTF-8")&lt;br /&gt;
  &amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;
  &amp;lt;ns0:doc xmlns:ns0="http://bar"&amp;gt;&lt;br /&gt;
    &amp;lt;ns1:sub xmlns:ns1="http://foo" /&amp;gt;&lt;br /&gt;
  &amp;lt;/ns0:doc&amp;gt;&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&lt;/pre&gt;
  &lt;br /&gt;
   We can see that the declared namespaces are now given an alias and all
  prefixes are now changed using those defined aliases. This is absolutley
  correct in a XML point of view but you can be in trouble sometimes with some
  applications for which you are outputing XML from elementtree based &lt;a
  href="http://www.python.org"&gt;Python&lt;/a&gt; programs because they do not support
  this properly on their side.&lt;br /&gt;
   &lt;br /&gt;
   Here is a workaround I found but I don't know if others exist :&lt;br /&gt;
   &lt;br /&gt;
&lt;pre&gt;
  &amp;gt;&amp;gt;&amp;gt; import cElementTree&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; import elementtree.ElementTree&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; my_namespaces = {'http://foo' : 'foo',&lt;br /&gt;
  ...                  'http://bar/' : bar}&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; elementtree.ElementTree._namespace_map.update(my_namespaces)&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; stream = """&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;
  ... &amp;lt;doc xmlns="http://bar"&lt;br /&gt;
  ...      xmlns:foo="http://foo"&amp;gt;&lt;br /&gt;
  ... &amp;lt;foo:sub/&amp;gt;&lt;br /&gt;
  ... &amp;lt;/doc&amp;gt;"""&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; doc = cElementTree.XML(stream)&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; print cElementTree.tostring(doc)&lt;br /&gt;
  &amp;lt;bar:doc xmlns="http://bar"&amp;gt;&lt;br /&gt;
    &amp;lt;foo:sub xmlns:foo="http://foo" /&amp;gt;&lt;br /&gt;
  &amp;lt;/bar:doc&amp;gt;
&lt;/pre&gt;
  Here, this has been serialized without replacing the prefixes within
  qualifed names.&lt;br /&gt;
   &lt;br /&gt;
   The idea is that we are adding well known namespace prefixes to elementtree
  default ones.&lt;br /&gt;
   &lt;br /&gt;
   The default elementtre ones are defined within elementtree/ElementTree.py
  like below :&lt;br /&gt;
&lt;pre&gt;
  _namespace_map = {&lt;br /&gt;
      # "well-known" namespace prefixes&lt;br /&gt;
      "http://www.w3.org/XML/1998/namespace": "xml",&lt;br /&gt;
      "http://www.w3.org/1999/xhtml": "html",&lt;br /&gt;
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf",&lt;br /&gt;
      "http://schemas.xmlsoap.org/wsdl/": "wsdl",&lt;br /&gt;
  }
&lt;/pre&gt;
  &lt;br /&gt;
   This is not the best way I would have hope to find. Please let me know if
  you know any others.&lt;br /&gt;
   &lt;br /&gt;
   The problem I had recently was with &lt;a
  href="http://www.openoffice.org"&gt;OpenOffice.org&lt;/a&gt; 1.1.x.&amp;nbsp; (I don't
  know about the version2 though). &lt;br /&gt;
   &lt;br /&gt;
   

  &lt;div align="left"&gt;
   I could parse and serialize &lt;a
   href="http://openoffice.org"&gt;OpenOffice.org&lt;/a&gt; content XML documents and
   read them from &lt;a href="http://www.openoffice.org"&gt;OpenOffice.org&lt;/a&gt; at
   first. But as soon as I was modifiying the document from &lt;a
   href="http://www.openoffice.org"&gt;OpenOffice.org&lt;/a&gt; then it wasn't taking
   the namespace prefix aliases into consideration while inserting new
   elements. I used this trick and now &lt;a
   href="http://OpenOffice.org"&gt;OpenOffice.org&lt;/a&gt; is happy. I'm gonna report
   this issue to &lt;a
   href="http://blogs.nuxeo.com/sections/blogs/laurent_godard"&gt;Laurent&lt;/a&gt; to
   see if the &lt;a
   href="http://blogs.nuxeo.com/sections/blogs/laurent_godard"&gt;OpenOffice.org&lt;/a&gt;
   guys are aware about this issue.&lt;br /&gt;
   &lt;br /&gt;
    I fixed the issue as shown below. I used the &lt;i&gt;nmspace.mod&lt;/i&gt; from the
   OOo dtd to find out the relevant OOo namespaces.&lt;br /&gt;
   &lt;br /&gt;
&lt;pre&gt;
OOo_NS = "http://openoffice.org/2000/"&lt;br /&gt;
&lt;br /&gt;
OFFICE_NS = "%soffice" % OOo_NS&lt;br /&gt;
TABLE_NS  = "%stable" % OOo_NS&lt;br /&gt;
STYLE_NS  = "%sstyle" % OOo_NS&lt;br /&gt;
TEXT_NS   = "%stext" % OOo_NS&lt;br /&gt;
META_NS   = "%smeta" % OOo_NS&lt;br /&gt;
SCRIPT_NS = "%sscript" % OOo_NS&lt;br /&gt;
DRAWING_NS = "%sdrawing" % OOo_NS&lt;br /&gt;
CHART_NS = "%schart" % OOo_NS&lt;br /&gt;
NUMBER_NS = "%snumber" % OOo_NS&lt;br /&gt;
DATASTYLE_NS = "%sdatastyle" % OOo_NS&lt;br /&gt;
DR3D_NS = "%sdr3d" % OOo_NS&lt;br /&gt;
FORM_NS = "%sform" % OOo_NS&lt;br /&gt;
CONFIG_NS = "%sconfig" % OOo_NS&lt;br /&gt;
&lt;br /&gt;
FO_NS = "http://www.w3.org/1999/XSL/Format"&lt;br /&gt;
XLINK_NS = "http://www.w3.org/1999/xlink"&lt;br /&gt;
SVG_NS =  "http://www.w3.org/2000/svg"&lt;br /&gt;
MATH_NS = "http://www.w3.org/1998/Math/MathML"&lt;br /&gt;
# This will be used for the XML serialization and elementtree.&lt;br /&gt;
NAMESPACE_MAP = {&lt;br /&gt;
    OFFICE_NS    : 'office',&lt;br /&gt;
    TABLE_NS     : 'table',&lt;br /&gt;
    STYLE_NS     : 'style',&lt;br /&gt;
    TEXT_NS      : 'text',&lt;br /&gt;
    META_NS      : 'meta',&lt;br /&gt;
    SCRIPT_NS    : 'script',&lt;br /&gt;
    DRAWING_NS   : 'drawing',&lt;br /&gt;
    CHART_NS     : 'chard',&lt;br /&gt;
    NUMBER_NS    : 'number',&lt;br /&gt;
    DATASTYLE_NS : 'datastyle',&lt;br /&gt;
    DR3D_NS      : 'dr3d',&lt;br /&gt;
    FORM_NS      : 'form',&lt;br /&gt;
    CONFIG_NS    : 'config',&lt;br /&gt;
    MATH_NS      : 'math',&lt;br /&gt;
    SVG_NS       : 'svg',&lt;br /&gt;
    XLINK_NS     : 'xlink',&lt;br /&gt;
    FO_NS        : 'fo',&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
import elementtree.ElementTree as etree&lt;br /&gt;
etree._namespace_map.update(NAMESPACE_MAP)
&lt;/pre&gt;
   &lt;br /&gt;
   &lt;br /&gt;
  &lt;/div&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_02_23_elementtree-serialization-namespace-prefixes</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_02_23_elementtree-serialization-namespace-prefixes/atom?2006_02_23_elementtree-serialization-namespace-prefixes"
        title="Edit Here - ElementTree, serialization and namespace prefixes" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Looking for fast and memory friendly Python XML processing ?</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_02_23_looking-for-fast-memory-friendly-python-xml-processing" />
  <issued>2006-11-05T18:35:07Z</issued>
  <modified>2006-11-05T18:35:07Z</modified>
  <created>2006-02-23T12:33:20Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>coding</dc:subject>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>openoffice</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
   
    You don't how to optimize your Python based XML application anymore
   ?
    Are you tired of running out of RAM ? You got memory leaks all around
   ?
   
    I've been in this situation until last week for one year.
  
  
   I spent the last week rewriting a customer application written in
   cDomlette using cElementTree (note when I
  wrote it at this time cELementTree ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;div align="left"&gt;
   &lt;br /&gt;
    &lt;i&gt;You don't how to optimize your Python based XML application anymore
   ?&lt;br /&gt;
    Are you tired of running out of RAM ? You got memory leaks all around
   ?&lt;/i&gt;&lt;br /&gt;
   &lt;br /&gt;
    I've been in this situation until last week for one year.&lt;br /&gt;
  &lt;/div&gt;
  &lt;br /&gt;
   I spent the last week rewriting a customer application written in&lt;br /&gt;
   &lt;a href="http://4suite.org/index.xhtml"&gt;cDomlette&lt;/a&gt; using &lt;a
  href="http://effbot.org/zone/celementtree.htm"&gt;cElementTree&lt;/a&gt; (note when I
  wrote it at this time &lt;a
  href="http://effbot.org/zone/celementtree.htm"&gt;cELementTree&lt;/a&gt; didn't
  exist) &lt;br /&gt;
   &lt;br /&gt;
   My cDomlette experience has been a real pain last
  year with this&lt;br /&gt;
   project for the reasons I described above.&lt;br /&gt;
   &lt;br /&gt;
   Don't get me wrong about &lt;a
  href="http://4suite.org/index.xhtml"&gt;cDomlette&lt;/a&gt;. This is a library really
  well&lt;br /&gt;
   documented and much more better than the available DOM libraries in&lt;br /&gt;
   the &lt;a href="http://www.python.org/doc/2.4.2/modindex.html"&gt;standard Python
  distribution&lt;/a&gt; but you can't use it for applications&lt;br /&gt;
   such as the one I've been working on. Simply it's not enough.&lt;br /&gt;
   &lt;br /&gt;
   The application I'm talking about is an application for financial&lt;br /&gt;
   auditors. This is based on &lt;a href="http://www.cps-project.org/"&gt;CPS&lt;/a&gt;
  and make an heavy use of &lt;a
  href="http://www.openoffice.org/"&gt;OpenOffice.org&lt;/a&gt;&lt;br /&gt;
   calc documents. Lots and lots of OOo calc documents to process,
  modify&lt;br /&gt;
   according to complex financial rules every transaction.&lt;br /&gt;
   &lt;br /&gt;
   So two weeks ago I had problems with my application heavily requested&lt;br /&gt;
   by several users. Too slow, the servers were overloaded processing
  XML&lt;br /&gt;
   documents. For those who know what I'm talking about note the bad&lt;br /&gt;
   performances weren't only related to the XML processing. Not
  &lt;b&gt;only&lt;/b&gt;...&lt;br /&gt;
   &lt;br /&gt;
   I couldn't optimize the XML processing part anymore then I decided to&lt;br /&gt;
   recode from scratch all the XML processing modules I wrote with&lt;a
  href="http://4suite.org/index.xhtml"&gt;&lt;br /&gt;
   cDomlette&lt;/a&gt; using cElementTree this time. And oh dude, it rocks ! It
  really really rocks ! It works&lt;br /&gt;
   amazingly well now. The code is much more readable and maintainable,&lt;br /&gt;
   because of the elementtree API, it's fast and it's not consuming lots&lt;br /&gt;
   of memory. The same transactions are now completed ten times quicker than
  before !&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;h3&gt;Thank you &lt;a href="http://effbot.org/"&gt;Fredrik Lundh&lt;/a&gt;. You're the man
  !&lt;/h3&gt;
  &lt;br /&gt;
   I'm more than happy for several reasons here : &lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;my application is working and my customer is happy.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;having cElementTree working this way (meaning working so well)&lt;br /&gt;
    makes Python a first candidate language for XML processing.Java,&lt;br /&gt;
    for instance, doesn't have such module available it seems.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;elementtree will be soon available within the Python standard
   library.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   

  &lt;h3&gt;What about &lt;a href="http://codespeak.net/lxml"&gt;lxml&lt;/a&gt; ?&lt;/h3&gt;
  &lt;br /&gt;
   I considered using &lt;a href="http://codepseak.net/lxml"&gt;lxml&lt;/a&gt; for
  production but this library is too young&lt;br /&gt;
   right now. These are the problems I met trying to use it in production
  :&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;The dependencies are far too high. (&lt;a
   href="http://xmlsoft.org/"&gt;libxml2&lt;/a&gt; and &lt;a
   href="http://xmlsoft.org/XSLT/"&gt;libxslt&lt;/a&gt; bleeding&lt;br /&gt;
    edge revisions) This makes it hard to use everywhere and it seems&lt;br /&gt;
    to be the reason why &lt;a href="http://dev.zope.org/Zope3"&gt;Zope3&lt;/a&gt; can't
   makes it a dependency for instance.&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;Not yet memory leaks free... (see the &lt;a
   href="http://codespeak.net/pipermail/lxml-dev/2006-February/thread.html"&gt;mailing
   list&lt;/a&gt;)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;missing iterparse() method of elementtree for SAX-like processing
   (this&lt;/li&gt;
  &lt;/ul&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; one is a real killing
  in &lt;a href="http://effbot.org/zone/element-index.htm"&gt;elementtre&lt;/a&gt;)&lt;br /&gt;
   &lt;br /&gt;
   &lt;a href="http://codespeak.net/lxml"&gt;lxml&lt;/a&gt; should be pretty close to &lt;a
  href="http://effbot.org/zone/celementtree.htm"&gt;cElementTree&lt;/a&gt; performances
  though.&lt;br /&gt;
   &lt;br /&gt;
   Of course, &lt;a href="http://codespeak.net/lxml/"&gt;lxml&lt;/a&gt; has some nice
  features that elementtree does not&lt;br /&gt;
   provide yet because &lt;a href="http://codespeak.net/lxml"&gt;lxml&lt;/a&gt; is based
  on &lt;a href="http://xmlsoft.org/"&gt;libxml2&lt;/a&gt; and &lt;a
  href="http://xmlsoft.org/XSLT/"&gt;libxslt&lt;/a&gt;. But for 90%&lt;br /&gt;
   of the applications, I might need to write, &lt;a
  href="http://effbot.org/zone/element-index.htm"&gt;elementtree&lt;/a&gt; does the
  job. And it does it really well.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_02_23_looking-for-fast-memory-friendly-python-xml-processing</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_02_23_looking-for-fast-memory-friendly-python-xml-processing/atom?2006_02_23_looking-for-fast-memory-friendly-python-xml-processing"
        title="Edit Here - Looking for fast and memory friendly Python XML processing ?" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">My slides from Solution Linux 2006 about ECM and Zope3</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_02_01_my-slides-from-solution" />
  <issued>2006-02-02T02:49:54Z</issued>
  <modified>2006-02-02T02:49:54Z</modified>
  <created>2006-02-01T10:49:01Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>ZODB</dc:subject>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>five</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>rich_client</dc:subject>
  
  
    <dc:subject>slides</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">You can grab my slides from Solution Linux 2006
  about "ECM et
  Zope3" 
  here. These slidea are in French. The presentation was yesterday.
   </summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">You can grab &lt;a href="sl2006_zope3-ECM_final.pdf"&gt;my slides&lt;/a&gt; from &lt;a
  href="http://www.solutionslinux.fr/fr/index.php"&gt;Solution Linux 2006&lt;/a&gt;
  about "&lt;a
  href="http://en.wikipedia.org/wiki/Enterprise_Content_Management"&gt;ECM&lt;/a&gt; et
  &lt;a href="http://dev.zope.org/Zope3/"&gt;Zope3&lt;/a&gt;" &lt;a
  href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/sl2006_zope3-ECM_final.pdf"&gt;
  here&lt;/a&gt;. These slidea are in French. The presentation was yesterday.&lt;br /&gt;
   &lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_02_01_my-slides-from-solution</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_02_01_my-slides-from-solution/atom?2006_02_01_my-slides-from-solution"
        title="Edit Here - My slides from Solution Linux 2006 about ECM and Zope3" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Zope 3.2 and ZODB 3.6 final releases are out !</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_01_06_zope-3-2-zodb-3-6-final" />
  <issued>2006-01-06T13:36:49Z</issued>
  <modified>2006-01-06T13:36:49Z</modified>
  <created>2006-01-06T13:31:16Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>ZODB</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Here they are : Zope
  3.2 and ZODB 3.6
  final releases are out ! 
  
  Zope and ZODB are now released twice a year (June and December). These
  releases are the december 2005 ones. Zope-2.9 final release should land
  pretty soon. 
  
  I guess the annoucements should be posted in the following days.
  
  Congrats to everybody who spent time to work on theses releases ! (I
  ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">Here they are : &lt;a href="http://www.zope.org/Products/Zope3/3.2.0final"&gt;Zope
  3.2&lt;/a&gt; and &lt;a href="http://www.zope.org/Products/ZODB3.6"&gt;ZODB 3.6&lt;/a&gt;
  final releases are out ! &lt;br /&gt;
  &lt;br /&gt;
  Zope and ZODB are now released twice a year (June and December). These
  releases are the december 2005 ones. Zope-2.9 final release should land
  pretty soon. &lt;br /&gt;
  &lt;br /&gt;
  I guess the annoucements should be posted in the following days.&lt;br /&gt;
  &lt;br /&gt;
  Congrats to everybody who spent time to work on theses releases ! (I
  unfortunately wasn't able to spent the time I expected to on Zope-3.2 this
  time...)&lt;br /&gt;
  &lt;br /&gt;
  New year, new toys so happy new Zope year 2006 !</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_01_06_zope-3-2-zodb-3-6-final</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_01_06_zope-3-2-zodb-3-6-final/atom?2006_01_06_zope-3-2-zodb-3-6-final"
        title="Edit Here - Zope 3.2 and ZODB 3.6 final releases are out !" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">ZODB 3.7 : after commit hooks</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_01_06_zodb-3-7-after-commit" />
  <issued>2006-01-06T13:37:08Z</issued>
  <modified>2006-01-06T13:37:08Z</modified>
  <created>2006-01-06T03:03:42Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>ZODB</dc:subject>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>eclipse</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>rdf</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
   
    I just merged, within the ZODB trunk (3.7), a branch
   implementing an after commit hook support on transaction objects. This
   should be available with the 3.7a1 release.
  
  
   In the meanwhile, you can grab a svn checkout of the ZODB trunk, if you
  want to try out, including this feature over there : http://svn.zope.org/ZODB/trunk/
  
   
   Or, if you are a lucky ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;div align="left"&gt;
   &lt;br /&gt;
    I just merged, within the &lt;a
   href="http://www.zope.org/Products/ZODB3.6"&gt;ZODB&lt;/a&gt; trunk (3.7), a branch
   implementing an after commit hook support on transaction objects. This
   should be available with the 3.7a1 release.&lt;br /&gt;
  &lt;/div&gt;
  &lt;br /&gt;
   In the meanwhile, you can grab a svn checkout of the ZODB trunk, if you
  want to try out, including this feature over there : &lt;a
  href="http://svn.zope.org/ZODB/trunk/%20"&gt;http://svn.zope.org/ZODB/trunk/&lt;/a&gt;
  &lt;br /&gt;
   &lt;br /&gt;
   Or, if you are a lucky &lt;a href="http://www.cps-project.org"&gt;CPS&lt;/a&gt;
  developer, &lt;a
  href="https://svn.nuxeo.org/trac/pub/browser/CPSCompat/trunk/"&gt;CPSCompat&lt;/a&gt;
  already applies a patch on ZODB 3.6 allowing you to take advantage of this
  using Zope-2.9. You will even find some API extensions for hook execution
  ordering support within &lt;a
  href="https://svn.nuxeo.org/trac/pub/browser/CPSCore/trunk/"&gt;CPSCore&lt;/a&gt;.&lt;br /&gt;

   &lt;br /&gt;
   

  &lt;h3&gt;Motivations&lt;/h3&gt;
  Sometimes, applications want to execute some code after a transaction is
  committed. For example, one might want to launch non transactional code
  after a successful, or aborted, commit. Or still someone might want to
  launch asynchronous code after a commit.&amp;nbsp; A post-commit hook is now
  available for such use cases. &lt;br /&gt;
   

  &lt;div align="left"&gt;
   &lt;br /&gt;
    At Nuxeo, we needed this for a while for various reasons :&lt;br /&gt;
   &lt;br /&gt;
    

   &lt;ul&gt;
    &lt;li&gt;CPS and non transactional RDF db setup (such as redland)&lt;/li&gt;
   &lt;/ul&gt;

   &lt;ul&gt;
    &lt;li&gt;Zope3 and non transactional lucene setup (FSDirectory backend)&lt;/li&gt;
   &lt;/ul&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (Note, I'll post about
   Zope3 and lucene integration using PyLucene pretty soon)&lt;br /&gt;
    

   &lt;ul&gt;
    &lt;li&gt;Eclipse / CPS application specifics for a customer.&lt;/li&gt;

    &lt;li&gt;CPS asynchronous indexation&lt;/li&gt;

    &lt;li&gt;User Notification when a sensitive commit succeed or abort.&lt;/li&gt;

    &lt;li&gt;etc...&lt;br /&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;br /&gt;
    I'm sure this will be useful in various use cases in the future as we are
   considering more and more Zope, and especially Zope3, as an integration
   platform taking advantages of various technologies&lt;br /&gt;
    around. It's another topic but I guess it was worth mentioning it quickly
   here.&lt;br /&gt;
  &lt;/div&gt;
  &lt;br /&gt;
   

  &lt;h3&gt;Implementation details&lt;/h3&gt;
  Here is the method exposed by the ITransaction interface with the associated
  comment :&lt;br /&gt;
   &lt;br /&gt;
   
&lt;pre&gt;
      &amp;gt;&amp;gt;&amp;gt; def addAfterCommitHook(hook, args=(), kws=None):&lt;br /&gt;
      ...    """Register a hook to call after a transaction commit attempt.&lt;br /&gt;
      ...&lt;br /&gt;
      ...    he specified hook function will be called after the transaction&lt;br /&gt;
      ...    commit succeeds or aborts. The first argument passed to the hook&lt;br /&gt;
      ...    is a Boolean value, true if the commit succeeded, or false if the&lt;br /&gt;
      ...    commit aborted.  `args` specifies additional positional, and `kws`&lt;br /&gt;
      ...    keyword, arguments to pass to the hook.  `args` is a sequence of&lt;br /&gt;
      ...    positional arguments to be passed, defaulting to an empty tuple&lt;br /&gt;
      ...    (only the true/false success argument is passed).  `kws` is a&lt;br /&gt;
      ...    dictionary of keyword argumet names and values to be passed, or&lt;br /&gt;
      ...    the default None (no keyword arguments are passed).&lt;br /&gt;
      ...&lt;br /&gt;
      ...    Multiple hooks can be registered and will be called in the order they&lt;br /&gt;
      ...    were registered (first registered,first called).  This method can&lt;br /&gt;
      ...    also be called from a hook an executing hook can register more&lt;br /&gt;
      ...    hooks.  Applications should take care to avoid creating infinite loops&lt;br /&gt;
      ...    by recursively registering hooks.&lt;br /&gt;
      ...&lt;br /&gt;
      ...    Hooks are called only for a top-level commit.  A subtransaction&lt;br /&gt;
      ...    commit or savepoint creation does not call any hooks.  Calling a&lt;br /&gt;
      ...    hook "consumes" its registration:  hook registrations do not&lt;br /&gt;
      ...    persist across transactions.  If it's desired to call the same&lt;br /&gt;
      ...    hook on every transaction commit, then addAfterCommitHook() must be&lt;br /&gt;
      ...    called with that hook during every transaction; in such a case&lt;br /&gt;
      ...    consider registering a synchronizer object via a TransactionManager's&lt;br /&gt;
      ...    registerSynch() method instead.&lt;br /&gt;
      ...    """&lt;br /&gt;
      &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&lt;/pre&gt;
  &lt;br /&gt;
   

  &lt;h3&gt;Examples&lt;/h3&gt;
  &lt;br /&gt;
   Here is the tutorial doctest available within the ZODB transaction tests
  :&lt;br /&gt;
   &lt;br /&gt;
   
&lt;pre&gt;
  Let's define a hook to call, and a way to see that it was called.&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log = []&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; def reset_log():&lt;br /&gt;
    ...     del log[:]&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; def hook(status, arg='no_arg', kw1='no_kw1', kw2='no_kw2'):&lt;br /&gt;
    ...     log.append("%r arg %r kw1 %r kw2 %r" (status, arg, kw1, kw2))&lt;br /&gt;
  Now register the hook with a transaction.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; import transaction&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t = transaction.begin()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(hook, '1')&lt;br /&gt;
  We can see that the hook is indeed registered.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; [(hook.func_name, args, kws)&lt;br /&gt;
    ...  for hook, args, kws in t.getAfterCommitHooks()]&lt;br /&gt;
    [('hook', ('1',), {})]&lt;br /&gt;
  When transaction commit is done, the hook is called, with its arguments.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    []&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.commit()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    ["True arg '1' kw1 'no_kw1' kw2 'no_kw2'"]&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; reset_log()&lt;br /&gt;
  A hook's registration is consumed whenever the hook is called. 
  Since the hook above was called, it's no longer registered:&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; len(list(t.getAfterCommitHooks()))&lt;br /&gt;
    0&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; transaction.commit()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    []&lt;br /&gt;
&lt;br /&gt;
  The hook is only called after a full commit, not for a savepoint or subtransaction.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t = transaction.begin()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(hook, 'A', dict(kw1='B'))&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; dummy = t.savepoint()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    []&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.commit(subtransaction=True)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    []&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.commit()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    ["True arg 'A' kw1 'B' kw2 'no_kw2'"]&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; reset_log()&lt;br /&gt;
  If a transaction is aborted, no hook is called.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t = transaction.begin()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(hook, ["OOPS!"])&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; transaction.abort()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    []&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; transaction.commit()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    []&lt;br /&gt;
  The hook is called after the commit is done, so even if the&lt;br /&gt;
  commit fails the hook will have been called.  To provoke failures in&lt;br /&gt;
  commit, we'll add failing resource manager to the transaction.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; class CommitFailure(Exception):&lt;br /&gt;
    ...     pass&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; class FailingDataManager:&lt;br /&gt;
    ...     def tpc_begin(self, txn, sub=False):&lt;br /&gt;
    ...         raise&lt;br /&gt;
    ...     def abort(self, txn):&lt;br /&gt;
    ...         pass&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t = transaction.begin()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.join(FailingDataManager())&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(hook, '2')&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.commit()&lt;br /&gt;
    Traceback (most recent call last):&lt;br /&gt;
    ...&lt;br /&gt;
    CommitFailure&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    ["False arg '2' kw1 'no_kw1' kw2 'no_kw2'"]&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; reset_log()&lt;br /&gt;
  Let's register several hooks.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t = transaction.begin()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(hook, '4', dict(kw1='4.1'))&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(hook, '5', dict(kw2='5.2'))&lt;br /&gt;
  They are returned in the same order by getAfterCommitHooks.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; [(hook.func_name, args, kws)  #doctest: +NORMALIZE_WHITESPACE&lt;br /&gt;
    ...  for hook, args, kws in t.getAfterCommitHooks()]&lt;br /&gt;
    [('hook', ('4',), {'kw1': '4.1'}),&lt;br /&gt;
     ('hook', ('5',), {'kw2': '5.2'})]&lt;br /&gt;
  And commit also calls them in this order.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.commit()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; len(log)&lt;br /&gt;
    2&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log  #doctest: +NORMALIZE_WHITESPACE&lt;br /&gt;
    ["True arg '4' kw1 '4.1' kw2 'no_kw2'",&lt;br /&gt;
     "True arg '5' kw1 'no_kw1' kw2 '5.2'"]&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; reset_log()&lt;br /&gt;
  While executing, a hook can itself add more hooks, and they will all&lt;br /&gt;
  be called before the real commit starts.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; def recurse(status, txn, arg):&lt;br /&gt;
    ...     log.append('rec' + str(arg))&lt;br /&gt;
    ...     if arg:&lt;br /&gt;
    ...          txn.addAfterCommitHook(hook, '-')&lt;br /&gt;
    ...          txn.addAfterCommitHook(recurse, (txn, arg-1))&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t = transaction.begin()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(recurse, (t, 3))&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; transaction.commit()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log  #doctest: +NORMALIZE_WHITESPACE&lt;br /&gt;
    ['rec3',&lt;br /&gt;
             "True arg '-' kw1 'no_kw1' kw2 'no_kw2'",&lt;br /&gt;
     'rec2',&lt;br /&gt;
             "True arg '-' kw1 'no_kw1' kw2 'no_kw2'",&lt;br /&gt;
     'rec1',&lt;br /&gt;
             "True arg '-' kw1 'no_kw1' kw2 'no_kw2'",   &lt;br /&gt;
     'rec0']&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; reset_log()&lt;br /&gt;
  If an after commit hook is raising an exception then it will log a&lt;br /&gt;
  message at error level so that if other hooks are registered they&lt;br /&gt;
  can be executed. We don't support execution dependencies at this
  level.&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; mgr = transaction.TransactionManager()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; do = DataObject(mgr)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; def hookRaise(status, arg='no_arg', kw1='no_kw1',  kw2='no_kw2'):&lt;br /&gt;
    ...     raise TypeError("Fake raise")&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t = transaction.begin()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(hook, ('-', 1))&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(hookRaise, ('-', 2))&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(hook, ('-', 3))&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; transaction.commit()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    ["True arg '-' kw1 1 kw2 'no_kw2'", "True arg '-' kw1 3 kw2 'no_kw2'"]&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; reset_log()&lt;br /&gt;
  Test that the associated transaction manager has been cleanup when&lt;br /&gt;
  after commit hooks are registered&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; mgr = transaction.TransactionManager()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; do = DataObject(mgr)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t = transaction.begin()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; len(t._manager._txns)&lt;br /&gt;
    1&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(hook, ('-', 1))&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; transaction.commit()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; log&lt;br /&gt;
    ["True arg '-' kw1 1 kw2 'no_kw2'"]&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; len(t._manager._txns)&lt;br /&gt;
    0&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; reset_log()&lt;br /&gt;
&lt;br /&gt;
  The transaction is already committed when the after commit hooks&lt;br /&gt;
  will be executed. Executing the hooks must not have further&lt;br /&gt;
  effects on persistent objects.&lt;br /&gt;
  Start a new transaction&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t = transaction.begin()&lt;br /&gt;
  Create a DB instance and add a IOBTree within&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; from ZODB.tests.util import DB&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; from ZODB.tests.util import P&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; db = DB()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; con = db.open()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; root = con.root()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; root['p'] = P('julien')&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; p = root['p']&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; p.name&lt;br /&gt;
    'julien'&lt;br /&gt;
  This hook will get the object from the `DB` instance and change the flag attribute.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; def badhook(status, arg=None, kw1='no_kw1',  kw2='no_kw2'):&lt;br /&gt;
    ...     p.name = 'jul'&lt;br /&gt;
  Now register this hook and commit.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; t.addAfterCommitHook(badhook, (p, 1))&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; transaction.commit()&lt;br /&gt;
  Nothing should have changed since it should have been aborted.&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; p.name&lt;br /&gt;
    'julien'&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; db.close()&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;
  &lt;br /&gt;
   I let you check the code for further implementation details.&lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2006_01_06_zodb-3-7-after-commit</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2006_01_06_zodb-3-7-after-commit/atom?2006_01_06_zodb-3-7-after-commit"
        title="Edit Here - ZODB 3.7 : after commit hooks" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">CPS Platform R&amp;D paper from EuroPython 2005 has been published</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_09_30_cps-platform-r-d-paper" />
  <issued>2005-09-30T17:58:09Z</issued>
  <modified>2005-09-30T17:58:09Z</modified>
  <created>2005-09-30T17:57:04Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  We published today the EuroPython
  2005 CPS Platform R&amp;amp;D paper
  on cps-project.org that has been
  written as a 
  refereed
  paper for this event.
   
   
 </summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  We published today the &lt;a href="http://www.europython.org"&gt;EuroPython
  2005&lt;/a&gt; &lt;a href="http://www.cps-project.org"&gt;CPS Platform&lt;/a&gt; R&amp;amp;D paper
  on &lt;a href="http://www.cps-project.org"&gt;cps-project.org&lt;/a&gt; that has been
  written as a &lt;a
  href="http://www.python-in-business.org/ep2005/talk.chtml?talk=1712&amp;amp;track=646"&gt;
  &lt;span class="boxColorGray1 boxShapebox"&gt;&lt;span class="title"&gt;refereed
  paper&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; for this event.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_09_30_cps-platform-r-d-paper</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_09_30_cps-platform-r-d-paper/atom?2005_09_30_cps-platform-r-d-paper"
        title="Edit Here - CPS Platform R&amp;D paper from EuroPython 2005 has been published" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">blogs @ nuxeo.com updated !</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_09_28_blogs-nuxeo-com-updated" />
  <issued>2005-09-28T18:14:45Z</issued>
  <modified>2005-09-28T18:14:45Z</modified>
  <created>2005-09-28T18:14:27Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  http://blogs.nuxeo.com has been updated
  and runs now against : 
   
   

  
   Zope-2.8.1

   Latest
   CPS Platform

   Latest
   CPSBlog
  
 </summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  &lt;a href="http://blogs.nuxeo.com"&gt;http://blogs.nuxeo.com&lt;/a&gt; has been updated
  and runs now against : &lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;&lt;a
   href="http://www.zope.org/Products/Zope/2.8.1/Zope-2_8_1-released"&gt;Zope-2.8.1&lt;/a&gt;&lt;/li&gt;

   &lt;li&gt;&lt;a
   href="http://www.cps-project.org/static/nightly/CPS-3-base-2005-09-28.tgz"&gt;Latest
   CPS Platform&lt;/a&gt;&lt;/li&gt;

   &lt;li&gt;&lt;a href="http://svn.nuxeo.org/trac/pub/browser/CPSBlog/trunk/"&gt;Latest
   CPSBlog&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_09_28_blogs-nuxeo-com-updated</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_09_28_blogs-nuxeo-com-updated/atom?2005_09_28_blogs-nuxeo-com-updated"
        title="Edit Here - blogs @ nuxeo.com updated !" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">CPSGeo : Simple GIS for CPS</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_09_22_cpsgeo-simple-gis-for-cps" />
  <issued>2005-09-22T18:35:21Z</issued>
  <modified>2005-09-22T18:35:21Z</modified>
  <created>2005-09-22T18:28:42Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
  <summary type="text/html" mode="escaped">What is it ?

  
   Cartographic maps are extremely useful tools for analyzing and summarizing
   information with a spatial component, and many CPS documents have a spatial
   component: events happen at places, and reports are often concerned with
   places. With the addition of a few simple properties, CPS documents can be
   promoted to GIS (Geographic Information System) features. The ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">&lt;h2&gt;What is it ?&lt;/h2&gt;

  &lt;div align="left"&gt;
   Cartographic maps are extremely useful tools for analyzing and summarizing
   information with a spatial component, and many CPS documents have a spatial
   component: events happen at places, and reports are often concerned with
   places. With the addition of a few simple properties, CPS documents can be
   promoted to GIS (Geographic Information System) features. The CPSGeo
   product provides a new geolocation schema for documents, and a lightweight
   web GIS application for locating and displaying document features
   cartographically. CPSGeo builds upon open standards for GIS
   interoperability such as GML, the Geography Markup Language, and WMS, the
   Web Map Service specification. The body which oversees these standards is
   the Open Geospatial Consortium (&lt;a
   href="http://www.opengeospatial.org"&gt;http://www.opengeospatial.org&lt;/a&gt;).&lt;br /&gt;

   &lt;br /&gt;
    

   &lt;h2&gt;Documentation&lt;/h2&gt;
   You may check the CPSGeo manual over there :&lt;br /&gt;
    &lt;a
   href="http://www.cps-project.org/sections/projects/cpsgeo_simple_gis_for/doc/cpsgeo_manual"&gt;
   http://www.cps-project.org/sections/projects/cpsgeo_simple_gis_for/doc/cpsgeo_manual&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
    And as well the doc sub-folder of the product :&lt;br /&gt;
    &lt;a
   href="https://svn.nuxeo.org/trac/pub/browser/CPSGeo/trunk/doc/"&gt;https://svn.nuxeo.org/trac/pub/browser/CPSGeo/trunk/doc/&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
    

   &lt;h2&gt;Download&lt;br /&gt;
   &lt;/h2&gt;
   We released a first devel version of CPSGeo (0.1.1-1) that you can grab
   from there :&lt;br /&gt;
    &lt;a
   href="http://www.cps-project.org/sections/projects/cpsgeo_simple_gis_for/releases/cpsgeo_0_1_1_1_tgz"&gt;
   http://www.cps-project.org/sections/projects/cpsgeo_simple_gis_for/releases/cpsgeo_0_1_1_1_tgz&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
    The source code is over there :&lt;br /&gt;
    &lt;a
   href="https://svn.nuxeo.org/trac/pub/browser/CPSGeo/trunk/"&gt;https://svn.nuxeo.org/trac/pub/browser/CPSGeo/trunk/&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   Note, CPSGeo works against latest CPS versions. &lt;a
   href="http://www.cps-project.org/static/src/CPS-3.3.6.tar.gz"&gt;CPS-3.3.6&lt;/a&gt;&amp;nbsp;
   or &lt;a
   href="https://svn.nuxeo.org/trac/pub/browser/bundles/CPS-3-base/"&gt;trunk&lt;/a&gt;
   will be fine.&lt;br /&gt;
   &lt;br /&gt;
    

   &lt;h2&gt;Screenshots&lt;/h2&gt;
   Couple of screenshots to get a quick overview.&lt;br /&gt;
   &lt;br /&gt;
   &lt;a
   href="http://www.cps-project.org/sections/projects/cpsgeo_simple_gis_for/screenshots/view"&gt;
   http://www.cps-project.org/sections/projects/cpsgeo_simple_gis_for/screenshots/view&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
    

   &lt;h2&gt;Report bugs&lt;/h2&gt;
   &lt;a
   href="https://svn.nuxeo.org/trac/pub/newticket"&gt;https://svn.nuxeo.org/trac/pub/newticket&lt;/a&gt;&lt;br /&gt;

    &lt;a
   href="http://lists.nuxeo.com/mailman/listinfo/cps-users"&gt;http://lists.nuxeo.com/mailman/listinfo/cps-users&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
    

   &lt;h2&gt;Home page&lt;/h2&gt;
   &lt;a
   href="http://www.cps-project.org/sections/projects/cpsgeo_simple_gis_for"&gt;http://www.cps-project.org/sections/projects/cpsgeo_simple_gis_for&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   Thanks to &lt;a href="mailto:sgillies@frii.com"&gt;Sean Gillies&lt;/a&gt; for his work
   on this component.&lt;br /&gt;
   &lt;br /&gt;
   We would love hearing from your experience using CPSGeo :)&lt;br /&gt;
   &lt;br /&gt;
   Enjoy !&lt;br /&gt;
  &lt;/div&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_09_22_cpsgeo-simple-gis-for-cps</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_09_22_cpsgeo-simple-gis-for-cps/atom?2005_09_22_cpsgeo-simple-gis-for-cps"
        title="Edit Here - CPSGeo : Simple GIS for CPS" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">"z3ecm roadmap" slides from the Nuxeo technical kickoff 2005</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_09_05_z3ecm-roadmap-slides" />
  <issued>2005-09-06T11:02:00Z</issued>
  <modified>2005-09-06T11:02:00Z</modified>
  <created>2005-09-05T15:10:47Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>kickoff2005</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>slides</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Because z3ecm is an open process, I published couple of slides about z3ecm from the
  Nuxeo technical kickoff 2005 that occured last friday.
  
  You can grab them from the z3lab.org
  portal :
  http://www.z3lab.org/sections/news/z3ecm-roadmap-september8593

  
  Cheers.</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">Because z3ecm is an open process, I published couple of slides about z3ecm from the
  Nuxeo technical kickoff 2005 that occured last friday.&lt;br /&gt;
  &lt;br /&gt;
  You can grab them from the &lt;a href="http://www.z3lab.org"&gt;z3lab.org&lt;/a&gt;
  portal :&lt;br /&gt;
  &lt;a
  href="http://www.z3lab.org/sections/news/z3ecm-roadmap-september8593"&gt;http://www.z3lab.org/sections/news/z3ecm-roadmap-september8593&lt;/a&gt;&lt;br /&gt;

  &lt;br /&gt;
  Cheers.&lt;br /&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_09_05_z3ecm-roadmap-slides</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_09_05_z3ecm-roadmap-slides/atom?2005_09_05_z3ecm-roadmap-slides"
        title="Edit Here - &quot;z3ecm roadmap&quot; slides from the Nuxeo technical kickoff 2005" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">XML Schema support on Zope3 (Concret example)</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_19_xml-schema-support-on" />
  <issued>2005-08-19T05:44:18Z</issued>
  <modified>2005-08-19T05:44:18Z</modified>
  <created>2005-08-19T05:23:23Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  I added a demo package to illustrate the zope3 / xml schema integration.
  
   You can grab de code over there : 
   
  http://svn.nuxeo.org/trac/pub/browser/z3lab/zope/xmlschema/trunk/demo/

   
   The goal of the demo is to get a new content object registred within Zope3
  with an "add "and "edit" form driven by an XML Schema definition.
   
   This example is pretty simple but ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  I added a demo package to illustrate the zope3 / xml schema integration.
  &lt;br /&gt;
   You can grab de code over there : &lt;br /&gt;
   &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/z3lab/zope/xmlschema/trunk/demo/"&gt;
  http://svn.nuxeo.org/trac/pub/browser/z3lab/zope/xmlschema/trunk/demo/&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   The goal of the demo is to get a new content object registred within Zope3
  with an "add "and "edit" form driven by an XML Schema definition.&lt;br /&gt;
   &lt;br /&gt;
   This example is pretty simple but illustrate perfectly the goal of the XML
  integration and the power of Zope3 ;)&lt;br /&gt;
   &lt;br /&gt;
   Let's take a look at the xsd we will use in this demo&amp;nbsp; :&lt;br /&gt;
&lt;pre&gt;
&amp;lt;?xml version=&lt;b&gt;&lt;span
class="code-string"&gt;"1.0"&lt;/span&gt;&lt;/b&gt; encoding=&lt;b&gt;&lt;span
class="code-string"&gt;"UTF-8"&lt;/span&gt;&lt;/b&gt;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&lt;b&gt;&lt;span
class="code-string"&gt;"http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;/b&gt;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:attribute name=&lt;b&gt;&lt;span
class="code-string"&gt;"title"&lt;/span&gt;&lt;/b&gt; use=&lt;b&gt;&lt;span
class="code-string"&gt;"required"&lt;/span&gt;&lt;/b&gt; type=&lt;b&gt;&lt;span
class="code-string"&gt;"xs:normalizedString"&lt;/span&gt;&lt;/b&gt; /&amp;gt;&lt;br /&gt;
  &amp;lt;xs:attribute name=&lt;b&gt;&lt;span
class="code-string"&gt;"description"&lt;/span&gt;&lt;/b&gt; use=&lt;b&gt;&lt;span
class="code-string"&gt;"required"&lt;/span&gt;&lt;/b&gt; type=&lt;b&gt;&lt;span
class="code-string"&gt;"xs:string"&lt;/span&gt;&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&lt;/pre&gt;
  (demo.foo.xs)&lt;br /&gt;
  &lt;br /&gt;
   It defines a schema having 2 attributs : title and description.&lt;br /&gt;
   &lt;i&gt;title is required and is a normalizedString data type&lt;br /&gt;
   description is required as well and is a string data type.&lt;/i&gt;&lt;br /&gt;
   &lt;br /&gt;
   Let's define an interface IFoo and set the "foo" schema above. Note I'm
  using directly an id in here for the schema (i.e : foo). This is because at
  this stage the schema will be registred within Zope3 under this name. We
  will see how just after.&lt;br /&gt;
&lt;pre&gt;
&lt;b&gt;&lt;span class="code-lang"&gt;import&lt;/span&gt;&lt;/b&gt; zope.interface&lt;br /&gt;
&lt;b&gt;&lt;span class="code-lang"&gt;import&lt;/span&gt;&lt;/b&gt; zope.xmlschema&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span
class="code-lang"&gt;class&lt;/span&gt;&lt;/b&gt; IFoo(zope.interface.Interface):&lt;br /&gt;
    zope.xmlschema.set(&lt;b&gt;&lt;span class="code-string"&gt;'foo'&lt;/span&gt;&lt;/b&gt;)&lt;br /&gt;
&lt;/pre&gt;
  (demo.interfaces.py) &lt;br /&gt;
   &lt;br /&gt;
   Then define the Foo content object implementing IFoo. It inherits from
  presistent so that the content object will be persistent but it's not
  compulsory.&lt;br /&gt;
&lt;pre&gt;
&lt;b&gt;&lt;span class="code-lang"&gt;import&lt;/span&gt;&lt;/b&gt; persistent&lt;br /&gt;
&lt;b&gt;&lt;span class="code-lang"&gt;import&lt;/span&gt;&lt;/b&gt; zope.interface&lt;br /&gt;
&lt;b&gt;&lt;span
class="code-lang"&gt;from&lt;/span&gt;&lt;/b&gt; zope.xmlschema.demo.interfaces &lt;b&gt;&lt;span
class="code-lang"&gt;import&lt;/span&gt;&lt;/b&gt; IFoo&lt;br /&gt;
&lt;b&gt;&lt;span class="code-lang"&gt;class&lt;/span&gt;&lt;/b&gt; Foo(persistent.Persistent):&lt;br /&gt;
    zope.interface.implements(IFoo)&lt;br /&gt;
    &lt;b&gt;&lt;span class="code-lang"&gt;def&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span
class="code-func"&gt;__init__&lt;/span&gt;&lt;/b&gt;(self, title=&lt;b&gt;&lt;span
class="code-string"&gt;''&lt;/span&gt;&lt;/b&gt;, description=&lt;b&gt;&lt;span
class="code-string"&gt;''&lt;/span&gt;&lt;/b&gt;):&lt;br /&gt;
        self.title = title&lt;br /&gt;
        self.description = description
&lt;/pre&gt;
  (demo.foo.py)&lt;br /&gt;
   &lt;br /&gt;
   Now the zcml configuration (the glue) (see demo.configure.zcml) to tell
  Zope what to do whith the definitions above.&lt;br /&gt;
   &lt;br /&gt;
   Let's take a look at the configure.zcml file for the package as explained
  below : &lt;br /&gt;
   &lt;br /&gt;
&lt;pre class="code-block"&gt;
&amp;lt;xmlschema&lt;br /&gt;
      id = "foo"&lt;br /&gt;
      document ="foo.xs"&lt;br /&gt;
      &amp;gt;&lt;br /&gt;
  &amp;lt;/xmlschema&amp;gt;
&lt;/pre&gt;
  This directive registers the xsd foo.xs under the name of 'foo'&lt;br /&gt;
   &lt;br /&gt;
   Then the one below defines the new content object (notice the set_schema
  directive.) You can forget about the Zope permission stuffs if you're not
  familiar with Zope3&lt;br /&gt;
&lt;pre class="code-block"&gt;
 &amp;lt;content class=".foo.Foo"&amp;gt;&lt;br /&gt;
    &amp;lt;implements&lt;br /&gt;
  interface="zope.app.annotation.IAttributeAnnotatable" /&amp;gt;&lt;br /&gt;
    &amp;lt;require permission="zope.View"&lt;br /&gt;
            interface=".interfaces.IFoo" /&amp;gt;&lt;br /&gt;
    &amp;lt;require permission="zope.ManageContent"&lt;br /&gt;
       set_schema=".interfaces.IFoo" /&amp;gt;&lt;br /&gt;
  &amp;lt;/content&amp;gt;
&lt;/pre&gt;
  &lt;br /&gt;
   Then, we specify the add and edit form for the Foo content object.&lt;br /&gt;
   &lt;br /&gt;
&lt;pre class="code-block"&gt;
&amp;lt;browser:addform&lt;br /&gt;
      schema=".interfaces.IFoo"&lt;br /&gt;
      label="Add a Foo content object"&lt;br /&gt;
      content_factory=".foo.Foo"   &lt;br /&gt;
      arguments="title description"&lt;br /&gt;
      name="addFoo.html"&lt;br /&gt;
      permission="zope.ManageContent"&lt;br /&gt;
      /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;browser:editform&lt;br /&gt;
      schema=".interfaces.IFoo"&lt;br /&gt;
      label="Edit Foo"&lt;br /&gt;
      name="edit.html"&lt;br /&gt;
      menu="zmi_views" title="Edit"&lt;br /&gt;
      permission="zope.ManageContent"&lt;br /&gt;
      /&amp;gt;
&lt;/pre&gt;
  &lt;br /&gt;
   Then we need to tell Zope to add an entry in ZMI (Zope Management
  Interface) menu for us to be able to create a Foo content object through the
  ZMI.&lt;br /&gt;
&lt;pre class="code-block"&gt;
&amp;lt;browser:addMenuItem&lt;br /&gt;
      class=".foo.Foo"&lt;br /&gt;
      title="Foo"&lt;br /&gt;
      permission="zope.ManageContent"&lt;br /&gt;
      view="addFoo.html"&lt;br /&gt;
      /&amp;gt;
&lt;/pre&gt;
  &lt;br /&gt;
   Now start Zope3 go in the ZMI and click the Add menu entry and ask for the
  creation of a Foo content object. &lt;br /&gt;
  &lt;br /&gt;
  You will get the form below :&lt;br /&gt;
   &lt;br /&gt;
   &lt;img
  src="http://www.cps-project.org/workspaces/members/janguenot/step1/downloadFile/preview/snapshot5.png" /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   Then you can try to submit with empty values and since we specified
  required values on the xml schema the submission is not possible : &lt;br /&gt;
   &lt;br /&gt;
   &lt;img
  src="http://www.cps-project.org/workspaces/members/janguenot/step2/downloadFile/preview/snapshot6.png" /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
  Here it is for today.&lt;br /&gt;
  &lt;br /&gt;
  The 'magic' for the rendering against the schema is done by Zope3 itself.
  It's not the job of the zope.xmlschema component. &lt;br /&gt;
  &lt;br /&gt;
  Again, the next step will be to have the rendering done with XForms :)
  Currently, looking at it. I played today with the mozilla xforms plugin.
  I'll dig into this whike coming back from holidays at the beginning of
  September.&lt;br /&gt;
  &lt;br /&gt;
  Time to sleep... &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_08_19_xml-schema-support-on</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_19_xml-schema-support-on/atom?2005_08_19_xml-schema-support-on"
        title="Edit Here - XML Schema support on Zope3 (Concret example)" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">XML Schema support on Zope3  (update #1)</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_18_xml-schema-support-on" />
  <issued>2005-09-06T10:30:32Z</issued>
  <modified>2005-09-06T10:30:32Z</modified>
  <created>2005-08-18T02:23:32Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">Some news about the xmlschema component. 
   
  First, you may want to check the doctest over there :
   
  http://svn.nuxeo.org/trac/pub/file/z3lab/zope/xmlschema/trunk/README.txt

   
   I did some changes so that it's possible now to register the XML Schema
  document via ZCML such as this : 
   
   

&amp;lt;configure xmlns="http://namespaces.zope.org/zope"&amp;gt;
    &amp;lt;XMLSchema
    ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">Some news about the xmlschema component. &lt;br /&gt;
   &lt;br /&gt;
  First, you may want to check the doctest over there :&lt;br /&gt;
   &lt;a href="http://svn.nuxeo.org/trac/pub/file/z3lab/zope/xmlschema/trunk/README.txt"&gt;
  http://svn.nuxeo.org/trac/pub/file/z3lab/zope/xmlschema/trunk/README.txt&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   I did some changes so that it's possible now to register the XML Schema
  document via ZCML such as this : &lt;br /&gt;
   &lt;i&gt;&lt;br /&gt;
  &lt;/i&gt; 
&lt;pre&gt;
&lt;i&gt;&amp;lt;configure xmlns="http://namespaces.zope.org/zope"&amp;gt;&lt;br /&gt;
    &amp;lt;XMLSchema&lt;br /&gt;
       id="sample"&lt;br /&gt;
         document="src/zope/xmlschema/tests/examples/simple.xsd"&lt;br /&gt;
      /&amp;gt;&lt;br /&gt;
  &amp;lt;/configure&amp;gt;&lt;br /&gt;
&lt;/i&gt;
&lt;/pre&gt;
  &lt;br /&gt;
   Then the directive register a named utility within the global utility
  registy of Zope3 that will be used by the dedicated XSD handler.&lt;br /&gt;
   &lt;br /&gt;
   Now, to use it from you class def you just need to give the id (name) of
  the registred schema such as : &lt;br /&gt;
   &lt;br /&gt;
&lt;pre&gt;
  &amp;gt;&amp;gt;&amp;gt; import zope.interface&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; import zope.xmlschema&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; class IFoo(zope.interface.Interface):&lt;br /&gt;
  ...    zope.xmlschema.set('sample')&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;
  &lt;br /&gt;
   A new feature as well the validation : the handler perform an XML Schema
  validation against the XMLSchema.xsd from the w3c.&lt;br /&gt;
   &lt;br /&gt;
   If you want to test this package (or help right :)) be sure to check the
  deps. (especially, the CVS HEAD of libxml2 is required for the XML Schema
  validation)&lt;br /&gt;
   &lt;br /&gt;
  You will find the dependencies over there :&lt;br /&gt;
   &lt;a
  href="https://svn.nuxeo.org/trac/pub/file/z3lab/zope/xmlschema/trunk/DEPENDENCIES.txt"&gt;
  https://svn.nuxeo.org/trac/pub/file/z3lab/zope/xmlschema/trunk/DEPENDENCIES.txt&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   Now time to print the XML Schema specifications and code field mappers for
  the zope interface.&lt;br /&gt;
  &lt;br /&gt;
  Thanks to Kasimier Buchcik&amp;nbsp; for the pointer on the libxml2 CVS for the
  XML Schema validation.&lt;br /&gt;
  &lt;br /&gt;
  Time to sleep now :)&lt;br /&gt;</content>

  <id>tag:blogs.nuxe