<?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 01: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.nuxeo.com:sections:blogs:julien_anguenot:2005_08_18_xml-schema-support-on</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_18_xml-schema-support-on/atom?2005_08_18_xml-schema-support-on"
        title="Edit Here - XML Schema support on Zope3  (update #1)" />
</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</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_12_xml_schema_support_for" />
  <issued>2005-08-12T17:42:53Z</issued>
  <modified>2005-08-12T17:42:53Z</modified>
  <created>2005-08-12T17:22:57Z</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 started yesterday an XML Schema support for the ZopeInterface.  I
  would like to be able to define my schema with XML Schemas definitions
  instead of having to define them in Python.  (which is boring and
  Python specific...)
   
   The code is within the z3ecm repository: http://svn.nuxeo.org/trac/pub/browser/z3lab/zope/xmlschema/trunk/

   
   See an example : 
   ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  I started yesterday an XML Schema support for the ZopeInterface.&amp;nbsp; I
  would like to be able to define my schema with XML Schemas definitions
  instead of having to define them in Python.&amp;nbsp; (which is boring and
  Python specific...)&lt;br /&gt;
   &lt;br /&gt;
   The code is within the z3ecm repository: &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/z3lab/zope/xmlschema/trunk/"&gt;http://svn.nuxeo.org/trac/pub/browser/z3lab/zope/xmlschema/trunk/&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   See an example : &lt;br /&gt;
   &lt;br /&gt;
&lt;pre&gt;
filepath is a path to an XML Schema definition as defined below :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;
&amp;lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;br /&gt;
&amp;lt;xsd:element name="title" type="xsd:string"/&amp;gt;&lt;br /&gt;
&amp;lt;xsd:element name="description" type="xsd:string"/&amp;gt;&lt;br /&gt;
&amp;lt;/xsd:schema&amp;gt;&lt;br /&gt;
&lt;br /&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 ITest(zope.interface.Interface):&lt;br /&gt;
    ...     zope.xmlschema.set(filepath)&lt;br /&gt;
&lt;br /&gt;
Now introspect the fields defined within the xsd. We will see two new&lt;br /&gt;
fields : title and description.&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; names = list(ITest)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; names.sort()&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; names&lt;br /&gt;
    ['description', 'title']&lt;br /&gt;
&lt;br /&gt;
Now define a class implementing this interface.&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; class Test(object):&lt;br /&gt;
    ...     zope.interface.implements(ITest)&lt;br /&gt;
    ...     title = ''&lt;br /&gt;
    ...     description = ''&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ITest is implemented by Test&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; ITest.implementedBy(Test)&lt;br /&gt;
    True&lt;br /&gt;
&lt;br /&gt;
Let's create an instance of Test&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; test = Test()&lt;br /&gt;
&lt;br /&gt;
Defines potential values for the two fields&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; title = u"Title field"&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; description = u"Description field"&lt;br /&gt;
&lt;br /&gt;
Now we get the fields from the interface:&lt;br /&gt;
&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; title_field = ITest.get('title')&lt;br /&gt;
  &amp;gt;&amp;gt;&amp;gt; description_field = ITest.get('description')&lt;br /&gt;
&lt;br /&gt;
Next we have to bind these fields to the context, so that instance-specific&lt;br /&gt;
information can be used for validation:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; title_bound = title_field.bind(test)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; description_bound = description_field.bind(test)&lt;br /&gt;
&lt;br /&gt;
Now try to validate them :&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; title_bound.validate(title)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; description_bound.validate(description)&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;
  &lt;br /&gt;
   You can see that once the schema is set on the interface the interface
  behaves like if it had been defined in Python. Now let's dig into the XML
  Schema specification and implements at least all the zope.schema features so
  that zope.schema and zope.xmlschema will provide the same delcaratives
  possibililty.&lt;br /&gt;
   &lt;br /&gt;
   Notice, this component uses lxml as core XML parser. &lt;br /&gt;
   &lt;br /&gt;
   &lt;b&gt;It's the first step toward XForms support on z3ecm :)&lt;/b&gt;&lt;br /&gt;
   &lt;br /&gt;
 </content>

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

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Interfaces versus ABC within Python</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_08_interfaces_versus_abc" />
  <issued>2005-08-08T10:17:53Z</issued>
  <modified>2005-08-08T10:17:53Z</modified>
  <created>2005-08-08T10:17:17Z</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">
  Guido wrote a blog entry about interfaces versus ABC in Python.
   http://www.artima.com/weblogs/viewpost.jsp?thread=92662

   
   Nice to see the discussion about this point occuring. Note he's taking into
  account the fact that Zope3 and Twisted do have an actual interface
  implementation (which is the ZopeInterface BTW)
   
  As a Zope3 developer I just hope he will go for core ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  Guido wrote a blog entry about interfaces versus ABC in Python.&lt;br /&gt;
   &lt;a
  href="http://www.artima.com/weblogs/viewpost.jsp?thread=92662"&gt;http://www.artima.com/weblogs/viewpost.jsp?thread=92662&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   Nice to see the discussion about this point occuring. Note he's taking into
  account the fact that Zope3 and Twisted do have an actual interface
  implementation (which is the ZopeInterface BTW)&lt;br /&gt;
   &lt;br /&gt;
  As a Zope3 developer I just hope he will go for core Python interfaces
  ;)&lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_08_08_interfaces_versus_abc</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_08_interfaces_versus_abc/atom?2005_08_08_interfaces_versus_abc"
        title="Edit Here - Interfaces versus ABC within Python" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Zope3.1 -- Z3/ECM status and future</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_04_zope3_1_z3_ecm_status" />
  <issued>2005-08-04T14:12:57Z</issued>
  <modified>2005-08-04T14:12:57Z</modified>
  <created>2005-08-04T14:12:56Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>five</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  I just drop a mail on the z3lab mailing list about the Z3/ECM status and
  future as Zope3.1 has been released this week as an RC. 
  
  You may find the mail over there :
  http://lists.nuxeo.com/pipermail/z3lab/2005-August/000625.html

  
  Waiting for your comments.
 </summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  I just drop a mail on the z3lab mailing list about the Z3/ECM status and
  future as Zope3.1 has been released this week as an RC. &lt;br /&gt;
  &lt;br /&gt;
  You may find the mail over there :&lt;br /&gt;
  &lt;a
  href="http://lists.nuxeo.com/pipermail/z3lab/2005-August/000625.html"&gt;http://lists.nuxeo.com/pipermail/z3lab/2005-August/000625.html&lt;/a&gt;&lt;br /&gt;

  &lt;br /&gt;
  Waiting for your comments.&lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_08_04_zope3_1_z3_ecm_status</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_04_zope3_1_z3_ecm_status/atom?2005_08_04_zope3_1_z3_ecm_status"
        title="Edit Here - Zope3.1 -- Z3/ECM status and future" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">RC1 of Zope 3.1 released !</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_03_rc1_zope_3_1_released" />
  <issued>2005-08-03T00:13:12Z</issued>
  <modified>2005-08-03T00:13:12Z</modified>
  <created>2005-08-03T00:11:09Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  Here it is ! The first rc of Zope-3.1 is out. 
   
   After the bug
  day last week, which was really productive,  the first rc of
  Zope-3.1 is now  available. Stephan built the tarball today.
   
   You can grab a tarball from there :
   http://www.zope.org/Products/Zope3/3.1.0c1/Zope310c1Released

   
   If you wanna try out this release and help releasing the final you ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  Here it is ! The first rc of Zope-3.1 is out. &lt;br /&gt;
   &lt;br /&gt;
   After the &lt;a
  href="http://mail.zope.org/pipermail/zope3-dev/2005-July/015064.html"&gt;bug
  day&lt;/a&gt; last week, which was really productive,&amp;nbsp; the first rc of
  Zope-3.1 is now&amp;nbsp; available. Stephan built the tarball today.&lt;br /&gt;
   &lt;br /&gt;
   You can grab a tarball from there :&lt;br /&gt;
   &lt;a
  href="http://www.zope.org/Products/Zope3/3.1.0c1/Zope310c1Released"&gt;http://www.zope.org/Products/Zope3/3.1.0c1/Zope310c1Released&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   If you wanna try out this release and help releasing the final you may fill
  up bugs over there :&lt;br /&gt;
   &lt;a
  href="http://www.zope.org/Collectors/Zope3-dev/"&gt;http://www.zope.org/Collectors/Zope3-dev/&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   Now the trunk is dedicated to the 3.2 release for 3 months before the next
  feature freeze that should occur in October as Zope is moving to a time
  based release cycle. (december / june)&lt;br /&gt;
  &lt;br /&gt;
  Now back the Z3/ECM seriously (see my next posts)&lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_08_03_rc1_zope_3_1_released</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_08_03_rc1_zope_3_1_released/atom?2005_08_03_rc1_zope_3_1_released"
        title="Edit Here - RC1 of Zope 3.1 released !" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">luma LDAP client  : PyQT based  UI</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_07_28_luma_ldap_client" />
  <issued>2005-07-28T16:52:26Z</issued>
  <modified>2005-07-28T16:52:26Z</modified>
  <created>2005-07-28T16:49:09Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>linux</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  Just found out that the "good old" gq is not maintained anymore. (see : http://biot.com/gq/)
   
   Had to look for another one and found luma (http://luma.sf.net) which is a PyQT interface
  based application :) 
   
   Really nice !
   
   Here's couple of snapshots  there : http://luma.sourceforge.net/screenshots.html

   
   I really would like to see such kind of app ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  Just found out that the "good old" gq is not maintained anymore. (see : &lt;a
  href="http://biot.com/gq/"&gt;http://biot.com/gq/)&lt;/a&gt;&lt;br /&gt;
   &lt;br /&gt;
   Had to look for another one and found luma (&lt;a
  href="http://luma.sf.net"&gt;http://luma.sf.net&lt;/a&gt;) which is a PyQT interface
  based application :) &lt;br /&gt;
   &lt;br /&gt;
   Really nice !&lt;br /&gt;
   &lt;br /&gt;
   Here's couple of snapshots&amp;nbsp; there : &lt;a
  href="http://luma.sourceforge.net/screenshots.html"&gt;http://luma.sourceforge.net/screenshots.html&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   I really would like to see such kind of app integrated with KDE though
  :)&lt;br /&gt;
   &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_07_28_luma_ldap_client</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_07_28_luma_ldap_client/atom?2005_07_28_luma_ldap_client"
        title="Edit Here - luma LDAP client  : PyQT based  UI" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Promising Zope-3.2  and Twisted integration</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_07_26_zope_3_2_twisted" />
  <issued>2005-07-26T16:17:35Z</issued>
  <modified>2005-07-26T16:17:35Z</modified>
  <created>2005-07-26T16:07:03Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  I discussed with Stephan yesterday on IRC about the Zope3 and Twisted
  integration and just wanted to drop a blog related to this.
   
   Stephan did a great work with Michael Kerrin integrating Zope3 with
  Twisted. (A branch is already waiting for Zope-3.2 there.
  and they've been in touch with the Twisted guys all along this work. This is
  really promising !
   
   I found this ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  I discussed with Stephan yesterday on IRC about the Zope3 and Twisted
  integration and just wanted to drop a blog related to this.&lt;br /&gt;
   &lt;br /&gt;
   Stephan did a great work with Michael Kerrin integrating Zope3 with
  Twisted. (A branch is already waiting for Zope-3.2 &lt;a
  href="http://svn.zope.org/Zope3/branches/srichter-twisted-integration/"&gt;there.&lt;/a&gt;
  and they've been in touch with the Twisted guys all along this work. This is
  really &lt;b&gt;promising !&lt;/b&gt;&lt;br /&gt;
   &lt;br /&gt;
   I found this integration interesting for two reasons. The first reason,
  it's something that lots of Zope hackers are waiting for because Twisted is
  a really powerful framework that was unfornately hard to use with Zope until
  now (which was of course preventing Zope devels to dig into Twisted more
  deeply) and the second reason is that we can hope to see the developers from
  both projects trying to work together and use both frameworks on both
  sides.&lt;br /&gt;
   &lt;br /&gt;
   The thing now is to convince the Twisted folks to use Zope3 :) It seems
  they are developing their own stuffs such as &lt;a
  href="http://newo.com"&gt;newo&lt;/a&gt; or even their own persistency mechanims
  (persisted component) and probably tons of other things I'm not aware
  of...&lt;br /&gt;
   &lt;br /&gt;
   For someone involved in Zope2 for a while this it typically the kind of
  Python symptom you'll often find that consists of always reinventing the
  wheel since it's often easier to recode your own stuffs than integrating
  someone's else code and communicate with the folks maintaning it. We agreed
  it's bad and a waste of ressources after Zope2 and all the CMS projects
  around Zope2...&lt;br /&gt;
   &lt;br /&gt;
   I really hope both Twisted and Zope hackers will check and use more each
  other framework, share components and exchange patches. It will be so great
  merging somehow hackers from both communites !&lt;br /&gt;
   &lt;br /&gt;
   Twisted folks : check Zope3 !&amp;nbsp; (It will be using Twisted right
  -:))&lt;br /&gt;
   &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_07_26_zope_3_2_twisted</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_07_26_zope_3_2_twisted/atom?2005_07_26_zope_3_2_twisted"
        title="Edit Here - Promising Zope-3.2  and Twisted integration" />
</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.1 bug day on Friday 29th for the first 3.1 RC</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_07_26_zope_3_1_bug_day_on" />
  <issued>2005-07-26T15:17:42Z</issued>
  <modified>2005-07-26T15:17:42Z</modified>
  <created>2005-07-26T15:17:10Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  For those who didn't get to read the Zope3-dev mailing list, a bug day is
  planned for this friday (29th) to fix the remaining bugs on the trunk for
  the 3.1 release.
   
   See Stephan mail there :
   http://mail.zope.org/pipermail/zope3-dev/2005-July/015014.html

   
   We can expect the first RC of Zope-3.1 after this. Youpie !
   
   Personally, really excited about this ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  For those who didn't get to read the Zope3-dev mailing list, a bug day is
  planned for this friday (29th) to fix the remaining bugs on the trunk for
  the 3.1 release.&lt;br /&gt;
   &lt;br /&gt;
   See Stephan mail there :&lt;br /&gt;
   &lt;a
  href="http://mail.zope.org/pipermail/zope3-dev/2005-July/015014.html"&gt;h&lt;/a&gt;&lt;a
   href="http://mail.zope.org/pipermail/zope3-dev/2005-July/015014.html"&gt;ttp://mail.zope.org/pipermail/zope3-dev/2005-July/015014.html&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   We can expect the first RC of Zope-3.1 after this. Youpie !&lt;br /&gt;
   &lt;br /&gt;
   Personally, really excited about this because it means the feature freeze
  on the trunk will go away, with a dedicated 3.1 branch, and then the 3.2
  developments will start which will include for instance, for the
  stuffs&amp;nbsp; I'm following myself :&amp;nbsp; &lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;lxml dependency&lt;/li&gt;

   &lt;li&gt;xpdlcore&lt;/li&gt;

   &lt;li&gt;Twisted integration ! :) (This wil rock !)&lt;/li&gt;

   &lt;li&gt;Jean-Marc's cpsskins&amp;nbsp; ( the rumor says ;) )&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   and of course much more in the pipe after this :)&lt;br /&gt;
   &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_07_26_zope_3_1_bug_day_on</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_07_26_zope_3_1_bug_day_on/atom?2005_07_26_zope_3_1_bug_day_on"
        title="Edit Here - Zope-3.1 bug day on Friday 29th for the first 3.1 RC" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">RMLL2005 : My slides from the Python track are available</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_07_22_rmll2005_my_slides_from" />
  <issued>2005-07-22T17:19:30Z</issued>
  <modified>2005-07-22T17:19:30Z</modified>
  <created>2005-07-22T17:17:07Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>docbook</dc:subject>
  
  
    <dc:subject>erp5</dc:subject>
  
  
    <dc:subject>five</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>rdf</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">Finally, I took some time to publish my slides from the libre software meeting
  that occured 2 weeks ago in Dijon. These slides are in French and you may
  download them in pdf or OpenDocument formats.
   
  The topics were Python and XML and Introduction to Zope3
  
   You can grab them there from
  the AFPY website.
   
   Congrats to Tarek for the organization of the Python track !
 ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">Finally, I took some time to publish my slides from the &lt;a
  href="http://rmll2005.u-bourgogne.fr/sections"&gt;libre software meeting&lt;/a&gt;
  that occured 2 weeks ago in Dijon. These slides are in French and you may
  download them in pdf or OpenDocument formats.&lt;br /&gt;
   &lt;br /&gt;
  The topics were &lt;i&gt;Python and XML&lt;/i&gt; and &lt;i&gt;Introduction to Zope3&lt;/i&gt;&lt;br /&gt;
  &lt;br /&gt;
   You can grab them &lt;span style="text-decoration: underline;"&gt;&lt;a
  href="http://www.afpy.org/Members/anguenot/rmll2005/"&gt;there&lt;/a&gt;&lt;/span&gt; from
  the &lt;a href="http://www.afpy.org/"&gt;AFPY&lt;/a&gt; website.&lt;br /&gt;
   &lt;br /&gt;
   Congrats to Tarek for the organization of the Python track !&lt;br /&gt;
   &lt;br /&gt;
   Cheers,&lt;br /&gt;
   &lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;
  &lt;/span&gt;</content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_07_22_rmll2005_my_slides_from</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_07_22_rmll2005_my_slides_from/atom?2005_07_22_rmll2005_my_slides_from"
        title="Edit Here - RMLL2005 : My slides from the Python track are available" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Python doctest mode with emacs</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_06_25_python_doctest_mode_with" />
  <issued>2005-06-25T09:10:31Z</issued>
  <modified>2005-06-25T09:10:31Z</modified>
  <created>2005-06-25T09:10:31Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  python-mode package includes a doctest mode that rocks :
  
  http://cvs.sourceforge.net/viewcvs.py/python-mode/python-mode/doctest-mode.el

  
  Sweeeeeeeet........
  
  :)
 </summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  python-mode package includes a doctest mode that rocks :&lt;br /&gt;
  &lt;a
  href="http://cvs.sourceforge.net/viewcvs.py/python-mode/python-mode/doctest-mode.el"&gt;
  http://cvs.sourceforge.net/viewcvs.py/python-mode/python-mode/doctest-mode.el&lt;/a&gt;&lt;br /&gt;

  &lt;br /&gt;
  Sweeeeeeeet........&lt;br /&gt;
  &lt;br /&gt;
  :)&lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_06_25_python_doctest_mode_with</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_06_25_python_doctest_mode_with/atom?2005_06_25_python_doctest_mode_with"
        title="Edit Here - Python doctest mode with emacs" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Zope3 / ECM -- EP2005 sprint  :  ecmworkflow and architecture draft</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_06_24_zope3_ecm_ep2005_sprint" />
  <issued>2005-06-24T17:53:28Z</issued>
  <modified>2005-06-24T17:53:28Z</modified>
  <created>2005-06-24T17:37:17Z</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>sprint</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  The EP sprint is going on in here in Göteborg. I'm working on the workflow
  component.
   
   Today, I updated the document I wrote 2 days ago about the architecture
  overview. You can find it there : 
   
  http://www.z3lab.org/sections/front-page/white-papers/xpdlcore-zope-wfmc

   
   This is a draft and this is, of course, not in any way the
  definitive architecture... The ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  The EP sprint is going on in here in Göteborg. I'm working on the workflow
  component.&lt;br /&gt;
   &lt;br /&gt;
   Today, I updated the document I wrote 2 days ago about the architecture
  overview. You can find it there : &lt;br /&gt;
   &lt;a
  href="http://www.z3lab.org/sections/front-page/white-papers/xpdlcore-zope-wfmc"&gt;
  http://www.z3lab.org/sections/front-page/white-papers/xpdlcore-zope-wfmc&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   This is a draft and this is, of course, &lt;b&gt;not&lt;/b&gt; in any way the
  definitive architecture... The idea in here is to put on a paper the ideas
  and the workflow related stuffs I've been thinking on for couple of time and
  based on my previous experience on &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/CPSWorkflow/trunk/"&gt;CPSWorkflow&lt;/a&gt;.
  BTW, Anahide wrote a really nice howto document and product to explain the
  CPSWorkflow in &lt;a
  href="http://www.cps-project.org/sections/documentation/developers/cpsworkflow/viewLanguage/fr"&gt;
  french&lt;/a&gt; and &lt;a
  href="http://www.cps-project.org/sections/documentation/developers/cpsworkflow/viewLanguage/en"&gt;
  english&lt;/a&gt;&lt;br /&gt;
  &lt;br /&gt;
  If you are interested in workflow and ECM I would be please to get feedbacks
  on this first draft on the Zope3 / ECM architecture.&lt;br /&gt;
   &lt;br /&gt;
   I'm currently binding &lt;a
  href="http://svn.zope.org/Zope3/trunk/src/zope/wfmc/"&gt;zope.wfmc&lt;/a&gt; on &lt;a
  href="http://svn.nuxeo.org/trac/pub/browser/z3lab/xpdlcore/trunk/"&gt;xpdlcore&lt;/a&gt;
  as xpdl importer. It will be the first step to have the 3 components working
  together before going further in the development. I hope I could create a
  branch in Zope3 tomorrow for the 3.2 version of Zope3. The integration of &lt;a
  href="http://codespeak.net/lxml"&gt;lxml&lt;/a&gt; will be needed before this anyway
  since xplcore uses lxml for parsing xpdl files.&lt;br /&gt;
   &lt;br /&gt;
   I'll be &lt;a
  href="http://www.python-in-business.org/ep2005/talk.chtml?talk=2376&amp;amp;track=694"&gt;
  presenting&lt;/a&gt; CPSWorkflow and ecmworkflow at &lt;a
  href="http://www.europython.org"&gt;EP&lt;/a&gt; on monday. I'll talk about the new
  features of CPSWorkflow and my first architecture draft and prototype on
  ecmworkflow with a discussion about the document centric versus activity
  based workflow models at the same time.&lt;br /&gt;
   &lt;br /&gt;
   RIght. Now it's beer time (midsummer fest) in here where the days are
  really long and the night really bright at this time :) &lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_06_24_zope3_ecm_ep2005_sprint</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_06_24_zope3_ecm_ep2005_sprint/atom?2005_06_24_zope3_ecm_ep2005_sprint"
        title="Edit Here - Zope3 / ECM -- EP2005 sprint  :  ecmworkflow and architecture draft" />
</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.1 beta1 released !</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_06_20_zope_3_1_beta1_released" />
  <issued>2005-06-20T00:33:32Z</issued>
  <modified>2005-06-20T00:33:32Z</modified>
  <created>2005-06-20T00:26:20Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>five</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">
  Great news : Zope-3.1 went beta during the week-end !
   
   Stephan released it yesterday : 
   http://www.zope.org/Products/Zope3/3.1.0b1/Zope310b1Released

   
   Notice that the 'X' has been droped. Check the annoucement it's explained
  within. Basically, we think Zope3 is now more than ready for production use
  and the compatibility issues with Zope2 will continue to be ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  &lt;b&gt;Great news : Zope-3.1 went beta during the week-end !&lt;/b&gt;&lt;br /&gt;
   &lt;br /&gt;
   Stephan released it yesterday : &lt;br /&gt;
   &lt;a
  href="http://www.zope.org/Products/Zope3/3.1.0b1/Zope310b1Released"&gt;http://www.zope.org/Products/Zope3/3.1.0b1/Zope310b1Released&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   Notice that the 'X' has been droped. Check the annoucement it's explained
  within. Basically, we think Zope3 is now more than ready for production use
  and the compatibility issues with Zope2 will continue to be investigated
  through the &lt;a href="http://codespeak.net/z3/five/"&gt;Five&lt;/a&gt; component
  (which is now shipped with Zope-2.8 since the &lt;a
  href="http://blogs.nuxeo.com/sections/blogs/fermigier/2005_03_18_paris_zope3_ecm_five"&gt;
  Paris sprint 2005&lt;/a&gt;)&lt;br /&gt;
   &lt;br /&gt;
   I'm pretty happy about it and looking forward to the 3.1 final on my side
  cause :&lt;br /&gt;
   

  &lt;ol&gt;
   &lt;li&gt;&lt;a href="http://codespeak.net/lxml/"&gt;lxml&lt;/a&gt; support on Zope-3.2
   arriving.&lt;br /&gt;
   &lt;/li&gt;

   &lt;li&gt;inclusion of &lt;a
   href="https://svn.nuxeo.org/trac/pub/browser/z3lab/xpdlcore/"&gt;xplcore&lt;/a&gt;
   and an integration with &lt;a
   href="http://svn.zope.org/Zope3/trunk/src/zope/wfmc/"&gt;zope.wfmc.&lt;br /&gt;
   &lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;br /&gt;
   This is part of my work in the scope of the &lt;a
  href="http://www.z3lab.org"&gt;Zope3 / ECM&lt;/a&gt; workflow project (&lt;a
  href="https://svn.nuxeo.org/trac/pub/browser/z3lab/ecmworkflow/"&gt;ecmworkflow&lt;/a&gt;)&lt;br /&gt;

   &lt;br /&gt;
   I will be annoucing the &lt;a href="http://www.europython.org"&gt;EP&lt;/a&gt; workflow
  sprint topics that will include basically : &lt;br /&gt;
   

  &lt;ol&gt;
   &lt;li&gt;Work on xpdlcore : continue the prototype and integrate it with
   zope.wfmc.&lt;/li&gt;

   &lt;li&gt;Architecture review and coding on ecmworkflow&lt;/li&gt;
  &lt;/ol&gt;
  &lt;br /&gt;
   Zope3 time has come ! :) &lt;br /&gt;
 </content>

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

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Zope3 / ECM : Project launched !</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_05_17_zope3_ecm_project" />
  <issued>2005-05-17T02:34:10Z</issued>
  <modified>2005-05-17T02:34:10Z</modified>
  <created>2005-05-17T02:30:23Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>cps</dc:subject>
  
  
    <dc:subject>five</dc:subject>
  
  
    <dc:subject>nuxeo</dc:subject>
  
  
    <dc:subject>python</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">  That's official ! The new Zope3 / ECM project is launched !
  

   See the annoucement on the 
  project portal.



   
   The main goal of this project is to build the next-generation Open Source
  ECM Platform on top of 
  Zope 3 able to compete with the major ECM solutions on the market such
  as Documentum, OpenText, etc.
   

  What is Z3Lab ?

  Z3Lab aims at building a ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">  &lt;h2&gt;That's official ! The new Zope3 / ECM project is launched !&lt;/h2&gt;
  &lt;br /&gt;
&lt;strong&gt;
   See the annoucement on the &lt;a
  href="http://www.z3lab.org/sections/front-page/announcements/zope3-ecm-project"&gt;
  project portal.&lt;/a&gt;
&lt;/strong&gt;

&lt;br /&gt;
   &lt;i&gt;&lt;br /&gt;
   The main goal of this project is to build the next-generation Open Source
  ECM Platform on top of &lt;a
  href="http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/FrontPage"&gt;
  Zope 3&lt;/a&gt; able to compete with the major ECM solutions on the market such
  as Documentum, OpenText, etc.&lt;/i&gt;&lt;br /&gt;
   

  &lt;h2&gt;What is &lt;a href="http://z3lab.org/"&gt;Z3Lab&lt;/a&gt; ?&lt;/h2&gt;

  &lt;p&gt;&lt;a href="http://z3lab.org/"&gt;Z3Lab&lt;/a&gt; aims at building a strong community
  leveraging the experiences of both individuals and companies that are
  involved in the &lt;a href="http://zope.org/"&gt;Zope&lt;/a&gt; ECM/ CMS market nowadays
  to create the best ECM platform on the market and offer high-value
  professional services to customers.&lt;/p&gt;

  &lt;h2&gt;ECM Platform&lt;/h2&gt;

  &lt;p&gt;The project's main goals are :&lt;/p&gt;

  &lt;ul&gt;
   &lt;li&gt;to unify the whole &lt;a href="http://zope.org/"&gt;Zope&lt;/a&gt;/CMS-involved
   community to drastically reduce waste of resources (doing twice or more
   equivalent components / features).&lt;/li&gt;

   &lt;li&gt;to spread &lt;a
   href="http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/FrontPage"&gt;
   Zope 3&lt;/a&gt; technology on the market by providing a world class ECM Platform
   with companies providing consulting worldwide and backing the project.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   The project's goals are really ambitious but considerint the amount of
  excellent Zope hackers all around the world it is more than an acceptable
  mission :) &lt;br /&gt;
   &lt;br /&gt;
   The project's just starting and the first iteration will be to write
  specifications and to come up with the architecture of the framework. If you
  are interested in ECM architecture &lt;a
  href="http://www.z3lab.org/sections/mailing-lists/z3lab-mailing-list"&gt;join
  the mailing list !&lt;/a&gt;&lt;br /&gt;
   &lt;br /&gt;
   Couple of documents are already published on the portal such as &lt;a
  href="http://www.z3lab.org/sections/front-page/design-features/ecm-platform-concept"&gt;
  a concept map&lt;/a&gt; and an overview of the &lt;a
  href="http://www.z3lab.org/sections/front-page/spotlight-features/what-enterprise-content"&gt;
  ECM Plateform&lt;/a&gt;.&lt;br /&gt;
  &lt;br /&gt;
   Hope to see you all on the mailing list soon :)&lt;br /&gt;
 </content>

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

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">GNUpod : iPod on a Linux box</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_04_11_ipod_shuffle_works_fine" />
  <issued>2005-04-11T19:11:53Z</issued>
  <modified>2005-04-11T19:11:53Z</modified>
  <created>2005-04-11T19:07:48Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>linux</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  I got a nice 512 Mo iPOD shuffle for my birthday. Thank you guys ! :)
   
   It took me 5 minutes to make it work under a FC3 Linux box.
   
   At first it though it would act as a normal usb storage and then did this
  :
   
   $ mount -t vfat /dev/sda1 /media/IPOD -o sync
   
   At this point, everything was ok. I could transfert whatever files on
   the storage as it was a normal ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  I got a nice 512 Mo iPOD shuffle for my birthday. Thank you guys ! :)&lt;br /&gt;
   &lt;br /&gt;
   It took me 5 minutes to make it work under a FC3 Linux box.&lt;br /&gt;
   &lt;br /&gt;
   At first it though it would act as a normal usb storage and then did this
  :&lt;br /&gt;
   &lt;br /&gt;
   &lt;i&gt;$ mount -t vfat /dev/sda1 /media/IPOD -o sync&lt;/i&gt;&lt;br /&gt;
   &lt;br /&gt;
   At this point, everything was ok. I could transfert whatever files on&lt;br /&gt;
   the storage as it was a normal USB key thus I put couple of MP3''s to&lt;br /&gt;
   give a try.&amp;nbsp; At my surprise the lights were switching from red
  to&lt;br /&gt;
   green on the iPOD shuffle telling me there's an error. (Ok too easy&lt;br /&gt;
   maybe... )&lt;br /&gt;
   &lt;br /&gt;
   I found then the GNUpod package :&lt;br /&gt;
   &lt;br /&gt;
   &lt;a
  href="http://www.gnu.org/software/gnupod/gnupod.html"&gt;http://www.gnu.org/software/gnupod/gnupod.html&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   And after this everything worked well :)&lt;br /&gt;
   &lt;br /&gt;
   Actually, the iPOD uses a database that needs to be initialized.( I'm&lt;br /&gt;
   not gonna go in details in here about this. Go and read the manual !)&lt;br /&gt;
   &lt;br /&gt;
   &lt;b&gt;Basic examples :&lt;/b&gt;&lt;br /&gt;
   &lt;br /&gt;
   Initialize the iPOD :&lt;br /&gt;
   $ &lt;i&gt;gnupod_INIT.pl -m /media/IPOD&lt;/i&gt;&lt;br /&gt;
   &lt;br /&gt;
   Transfert songs : &lt;br /&gt;
   &lt;i&gt;$ gnupod_addsong.pl -m
  /media/IPOD/COX/Essential_Mix_03.05.00_live_from_golden-south_beach.mp3&lt;/i&gt;&lt;br /&gt;

   &lt;br /&gt;
   Search Songs : &lt;br /&gt;
   &lt;i&gt;$ gnupod_search.pl -m /media/IPOD -a cox&lt;/i&gt; &lt;br /&gt;
   &lt;br /&gt;
   Remove selected songs :&lt;br /&gt;
   $ &lt;i&gt;gnupod_search.pl -m /media/IPOD -a cox --delete&lt;/i&gt;&lt;br /&gt;
   &lt;br /&gt;
   Synchronize&lt;br /&gt;
   &lt;i&gt;$ mktunes.pl -m /media/IPOD/&lt;/i&gt;&lt;br /&gt;
   &lt;br /&gt;
   Unmount device&lt;br /&gt;
   &lt;i&gt;$ umount /media/IPOD&lt;/i&gt;&lt;br /&gt;
   &lt;br /&gt;
   And that's it ! &lt;br /&gt;
   &lt;br /&gt;
   The manual explains how to do cool stuffs such as rating your songs,&lt;br /&gt;
   edit playlists etc...&lt;br /&gt;
   &lt;br /&gt;
   So no worry, if you are running a Linux box you can steal an iPOD it will
  work :)&lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_04_11_ipod_shuffle_works_fine</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_04_11_ipod_shuffle_works_fine/atom?2005_04_11_ipod_shuffle_works_fine"
        title="Edit Here - GNUpod : iPod on a Linux box" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">On the road to CPS-3.4: CPSPortlets / CPSSkins shipped within the standard CPS distribution</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_04_07_on_road_to_cps_3_4" />
  <issued>2005-04-07T15:17:02Z</issued>
  <modified>2005-04-07T15:17:02Z</modified>
  <created>2005-04-07T02:03:24Z</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>sprint</dc:subject>
  
  
    <dc:subject>zope</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  CPSPortlets and CPSSkins are now shipped as a default environment with a
  CPSDefault Site.
   
   See for installation / upgrade and status notes there : 
   
   http://lists.nuxeo.com/pipermail/cps-devel/2005-April/001364.html

   
   It's a major step toward CPS-3.4 release and a enormous improvement in term
  of user interface and development process for the future.
   
   A ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  CPSPortlets and CPSSkins are now shipped as a default environment with a
  CPSDefault Site.&lt;br /&gt;
   &lt;br /&gt;
   See for installation / upgrade and status notes there : &lt;br /&gt;
   &lt;br /&gt;
   &lt;a
  href="http://lists.nuxeo.com/pipermail/cps-devel/2005-April/001364.html"&gt;http://lists.nuxeo.com/pipermail/cps-devel/2005-April/001364.html&lt;/a&gt;&lt;br /&gt;

   &lt;br /&gt;
   It's a major step toward CPS-3.4 release and a enormous improvement in term
  of user interface and development process for the future.&lt;br /&gt;
   &lt;br /&gt;
   A CPSDefault Site provides now a portlets environment inspired by the JSR
  168 specifications managed by a WYSIWYG theme editor 'out of the box'.
  &lt;br /&gt;
   &lt;br /&gt;
   I believe, this will be an enormous advantage for CPS for the following
  reasons :&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;because until now the former box system was too hostile for
   non-technical people and was probably discouraging them to go further and
   adopt CPS to build small publication portal.&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
   &lt;li&gt;&amp;nbsp;because CPSSkins offers a really powerful but simple environment
   to customize TTW most of what you need to customize usually.&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
   &lt;li&gt;&amp;nbsp;No need to write CSS !!!! (Who likes to write css ?? ;) )&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
   &lt;li&gt;&amp;nbsp;because it permits to get rid of the default 3 columns / header /
   footer, etc... without typing a single line of code and thus it means less
   restrictions in term of look and feel. (check this : &lt;a
   href="http://tibosoulcie.net/"&gt;http://tibosoulcie.net/&lt;/a&gt;. Would you have
   guess it's a CPS instance ?)&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
   &lt;li&gt;&amp;nbsp;because integrators will be even more productive than before
   :&lt;/li&gt;
  &lt;/ul&gt;

  &lt;blockquote&gt;
   &lt;ul&gt;
    &lt;li&gt;packaging is easier since CPSSkins provides XML export / import of
    theme and portlets configuration (No need to write any Python !)&lt;br /&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
  &lt;/blockquote&gt;

  &lt;blockquote&gt;
   &lt;ul&gt;
    &lt;li&gt;because the learning curve of CPS will decrease. Only one
    concept&amp;nbsp;&amp;nbsp; to learn now for integration -&amp;gt; CPSSchemas.&lt;/li&gt;
   &lt;/ul&gt;
  &lt;/blockquote&gt;

  &lt;blockquote&gt;
   &lt;ul&gt;
    &lt;li&gt;&amp;nbsp;&amp;nbsp; less regressions while updating because less skins and
    macro libs to write. CPSSkins will act as a glue on top of the
    framework.&lt;br /&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
  &lt;/blockquote&gt;
  &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;&amp;nbsp;because it was what was missing to CPS on top of its
   powerful&lt;/li&gt;
  &lt;/ul&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; framework probably hidden by
  the green and blue basic colors of the&lt;br /&gt;
   &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CPSDefault Site :)&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;RAM Cache integrated to portlets to increase performances.&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;because Zope is not php and won't ever be thus the main_template
   aprroach is not suitable on Zope servers. (definitely too heavy)&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;because it will be easier for Plone sites using CPSSkins to migrate to
   CPS ;)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   This projects &lt;a
  href="http://www.zope.org/Members/nuxeo/news/cps-erp5-sprint-report.html/#cpsskins-cps3-integration-work-during-the-nuxeo-cps-erp5-sprint"&gt;
  started during the Paris sprint last year&lt;/a&gt;.&lt;br /&gt;
   &lt;br /&gt;
   And I'm really really really happy to see it where it is now :) Thank you
  Jean-Marc for your great work. in between.&lt;br /&gt;
   &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_04_07_on_road_to_cps_3_4</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_04_07_on_road_to_cps_3_4/atom?2005_04_07_on_road_to_cps_3_4"
        title="Edit Here - On the road to CPS-3.4: CPSPortlets / CPSSkins shipped within the standard CPS distribution" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">CPSCore adds pre-commit transaction hooks support on ZODB 3.2</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_04_04_cpscore_adds_pre_commit" />
  <issued>2005-04-11T12:27:55Z</issued>
  <modified>2005-04-11T12:27:55Z</modified>
  <created>2005-04-04T19:14:10Z</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">
  Issue : 
   
   We recently realized on a CPS instance while plugging an external catalog
  (ZSQLCatalog actually) that a *lot* of reindexations (something like 10)
  occured at creation time. Same behavior for content modifications and still
  the same with workflow transition excecutions.
   
   Usually, the problem is not visible but as soon as you get big catalog (for
  instance ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  &lt;b&gt;Issue :&lt;/b&gt; &lt;br /&gt;
   &lt;br /&gt;
   We recently realized on a CPS instance while plugging an external catalog
  (ZSQLCatalog actually) that a *lot* of reindexations (something like 10)
  occured at creation time. Same behavior for content modifications and still
  the same with workflow transition excecutions.&lt;br /&gt;
   &lt;br /&gt;
   Usually, the problem is not visible but as soon as you get big catalog (for
  instance 600 K entries) then the creation or workflow transition execution
  had a tendency to be slow down. &lt;br /&gt;
   &lt;br /&gt;
   &lt;b&gt;First step : object repository objects&lt;br /&gt;
  &lt;br /&gt;
  &lt;/b&gt; Historically, the object repostiory objects within CPS3 were indexed.
  It wasn't necesarly anymore since CPS branch 3.1.x and the new rearch
  mecanism that basically aggregates the repository object attributs on the
  proxy itself with the help of dedicated proxy indexes. (Ben did a great work
  at this time and the search speed of CPS grew up big time after this).&lt;br /&gt;
   &lt;br /&gt;
   Thus, the first step was to avoid repository object indexations.&lt;br /&gt;
   &lt;br /&gt;
   Direct benefits : &lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;Half of the indexations avoided&lt;/li&gt;

   &lt;li&gt;Lighter catalog and thus more efficient ones when they become really
   big.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   &lt;b&gt;Second step : getting only one reindexation per-object and
  per-transaction no matter what appends to the objects during the
  transaction.&lt;br /&gt;
  &lt;br /&gt;
  &lt;/b&gt; First, I've been trying to figure out where to call my
  &lt;i&gt;reindexObject()&lt;/i&gt; method within the CPS architecture. It's definitely
  not mangeable especially when you got during the same transitions : object
  reindexation, object security reindexation and workflow transition executed
  with the object involved. The CMF is definitely not optimized at all on this
  point.&lt;br /&gt;
   &lt;br /&gt;
   Then, we started to discuss with Florent about a possible post-publishing
  hook on the Zope publisher. No existing hooks were available for this and no
  way to patch properly the framework for our extensions. &lt;br /&gt;
   &lt;br /&gt;
   We discussed about the problem on zope-dev and zodb-dev (thanks to the
  people over there for the answers) &lt;br /&gt;
   &lt;br /&gt;
   The problem we were faced to was that the ZODB-3.2 (the one Zope-2.7.x is
  using) doesn't provide good ways to hook just *before* the first commit
  phase of the transaction.&lt;br /&gt;
   &lt;br /&gt;
   There's a way to register a hook executed at the beginning of the first
  commit phase implementing this interface : &lt;br /&gt;
   &lt;br /&gt;
   
&lt;pre&gt;
   &lt;a
href="http://cvs.nuxeo.org/cgi-bin/viewcvs.cgi/CPS3/CPSCore/interfaces/IZODBTransactionHook.py?rev=1.1&amp;amp;view=auto"&gt; http://cvs.nuxeo.org/cgi-bin/viewcvs.cgi/CPS3/CPSCore/interfaces/IZODBTransactionHook.py?rev=1.1&amp;amp;view=auto&lt;/a&gt;&lt;br /&gt;
&lt;/pre&gt;
  &lt;br /&gt;
   and registering the object implementing this interface like this&amp;nbsp; :
  &lt;br /&gt;
   &lt;br /&gt;
   &lt;i&gt;&amp;gt;&amp;gt;&amp;gt; get_transaction().register(hookInstance)&lt;/i&gt;&lt;br /&gt;
   &lt;br /&gt;
   The problem is that this hook is called too late in the commit process
  (during phase1) and the objects are already frozen at this time. It's thus
  not possible to deal with Persistent Objects and thus no way to cope with
  our Indexation problems.&lt;br /&gt;
   &lt;br /&gt;
   We discovered that Zope-3.3.x would have provide a way to do the job with
  the Synchronizers and the beforeCompletions() API :&lt;br /&gt;
   &lt;br /&gt;
   See the discussion there : &lt;br /&gt;
   &lt;a
  href="http://mail.zope.org/pipermail/zope-dev/2005-April/024566.html"&gt;&lt;br /&gt;
   http://mail.zope.org/pipermail/zope-dev/2005-April/024566.html&lt;/a&gt;&lt;br /&gt;
   &lt;br /&gt;
   I finally decided to extend the ZODB-3.2 transactions to make them support
  pre-commit hooks with a subscriber mecanism that I may use for an Indexation
  manager subscriber.&lt;br /&gt;
   &lt;span style="font-family: monospace;"&gt;&lt;br /&gt;
  &lt;/span&gt; A pre transaction commit hook has been added to the ZODB Transaction
  supporting subscribers registration. Each subscriber has a commit() method
  called just &lt;b class="moz-txt-star"&gt;&lt;span
  class="moz-txt-tag"&gt;*&lt;/span&gt;before&lt;span class="moz-txt-tag"&gt;*&lt;/span&gt;&lt;/b&gt; the
  first commit phase that contains the actual code to execute and an abort()
  method called at the beginning of the abort() method of the transaction
  class. :&lt;br /&gt;
   &lt;br /&gt;
&lt;pre wrap=""&gt;
&lt;b&gt;Pre-commit hook definition with subscribers :&lt;/b&gt;&lt;br /&gt;
&lt;a class="moz-txt-link-freetext"
href="http://cvs.nuxeo.org/cgi-bin/viewcvs.cgi/CPS3/CPSCore/PatchZODB.py"&gt;http://cvs.nuxeo.org/cgi-bin/viewcvs.cgi/CPS3/CPSCore/PatchZODB.py&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Subscriber definition :&lt;/b&gt;&lt;br /&gt;
&lt;a class="moz-txt-link-freetext"
href="http://cvs.nuxeo.org/cgi-bin/viewcvs.cgi/CPS3/CPSCore/TransactionCommitSubscribers.py?rev=1.1&amp;amp;view=auto"&gt;http://cvs.nuxeo.org/cgi-bin/viewcvs.cgi/CPS3/CPSCore/TransactionCommitSubscribers.py?rev=1.1&amp;amp;view=auto&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Subscriber interface :&lt;/b&gt;&lt;br /&gt;
&lt;a class="moz-txt-link-freetext"
href="http://cvs.nuxeo.org/cgi-bin/viewcvs.cgi/CPS3/CPSCore/interfaces/ITransactionCommitSubscriber.py?rev=1.1&amp;amp;view=auto"&gt;http://cvs.nuxeo.org/cgi-bin/viewcvs.cgi/CPS3/CPSCore/interfaces/ITransactionCommitSubscriber.py?rev=1.1&amp;amp;view=auto&lt;/a&gt;&lt;br /&gt;
You may register your own subscribers by implementing the interface&lt;br /&gt;
above and register them to the list of pre-commit transaction subscribers.
&lt;/pre&gt;
  &lt;br /&gt;
   This is checked in and available in the HEAD of CPSCore.&lt;span
  style="font-family: monospace;"&gt;&lt;br /&gt;
  &lt;br /&gt;
  &lt;/span&gt; Note that the extensions currently defined within CPSCore will
  disapear&lt;span style="font-family: monospace;"&gt;.&lt;br /&gt;
  &lt;/span&gt; &lt;br /&gt;
   The threads are still running talking about an implementation for ZODB-3.4
  of a simple before transaction commit hook :&lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;&lt;a class="moz-txt-link-freetext"
   href="http://mail.zope.org/pipermail/zope-dev/2005-April/024566.html"&gt;http://mail.zope.org/pipermail/zope-dev/2005-April/024566.html&lt;/a&gt;&lt;/li&gt;

   &lt;li&gt;&lt;a class="moz-txt-link-freetext"
   href="http://mail.zope.org/pipermail/zodb-dev/2005-April/008661.html"&gt;http://mail.zope.org/pipermail/zodb-dev/2005-April/008661.html&lt;/a&gt;&lt;/li&gt;

   &lt;li&gt;&lt;a class="moz-txt-link-freetext"
   href="http://mail.zope.org/pipermail/zodb-dev/2005-April/008667.html"&gt;http://mail.zope.org/pipermail/zodb-dev/2005-April/008667.html&lt;/a&gt;&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   &amp;nbsp;&amp;nbsp; J.&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   &lt;b&gt;&lt;br /&gt;
  &lt;/b&gt; &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_04_04_cpscore_adds_pre_commit</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_04_04_cpscore_adds_pre_commit/atom?2005_04_04_cpscore_adds_pre_commit"
        title="Edit Here - CPSCore adds pre-commit transaction hooks support on ZODB 3.2" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">Activity based workflows vs stateful workfows</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_03_15_activity_based_workflows" />
  <issued>2005-03-15T06:44:00Z</issued>
  <modified>2005-03-15T06:44:00Z</modified>
  <created>2005-03-15T01:02:29Z</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>sprint</dc:subject>
  
  
    <dc:subject>zope3</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  
   Paris sprint day #1
  
  
   Stateful workflows / activity based workflows : from CPS3 workflow
  system to Zope3.
   
   I'm going to focus on workflow application during the Zope3 Paris sprint
  since it's one of the key architecture pieces of a content management
  framework and thus more than necesary if we want to start modelizing complex
  workflow applications such as the ...</summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  &lt;div align="center"&gt;
   &lt;h2 align="left"&gt;&lt;b&gt;Paris sprint day #1&lt;/b&gt;&lt;/h2&gt;
  &lt;/div&gt;
  &lt;b&gt;&lt;br /&gt;
  &lt;/b&gt; &lt;i&gt;Stateful workflows / activity based workflows : from CPS3 workflow
  system to Zope3.&lt;/i&gt;&lt;br /&gt;
   &lt;br /&gt;
   I'm going to focus on workflow application during the Zope3 Paris sprint
  since it's one of the key architecture pieces of a content management
  framework and thus more than necesary if we want to start modelizing complex
  workflow applications such as the ones we are currently designing with CPS3
  for our customers. And I've to say I'm pretty in a hurry to start building
  applications on the Z3 framework in Nuxeo's project ;)&amp;nbsp; Furthermore,
  I'm sensitive to the problem since I've been working on CPSWorkfow and other
  customer specific workflow related issues in the past quite
  intensively.&lt;br /&gt;
   &lt;br /&gt;
   Currently, CPS3 has a stateful workfow engine implementation : CPSWorkflow
  which is a set of extensions of DCWorkflow.&lt;br /&gt;
   &lt;br /&gt;
   DCWorkflow is a stateful workflow engine with what you can easily modelized
  generic reusable workflow definitions that you may apply globally on objects
  (content_type in CMF). A workflow definition in DCWorkflow is composed of
  states, transitions, variables and roles - permissions maps (the workflow
  itself takes care of roles - permissions. updates while entering state) It
  is a "document centric approach" that adresses the basic issues we could be
  faced to within a content management scope (like basics review / publication
  workflows). The workflow relevant data (variables in DCWorkflow) are hooked
  on the objects themselves since the workflow definitions are generic.
  Furthermore, it has a pretty nice end-user interface that make the
  modelization of workflow definitions really trivial within a CMF portal for
  non CS people.&lt;br /&gt;
   &lt;br /&gt;
   CPSWorkflow is a set of extensions of DCWorkflow, heart of the CPS3
  architecture, with some really nice add-ons such as placeful workflows,
  enhanced transitions, proxy knowledge for versionning, security
  orirentation, event service use and a more recent add-on that is just
  reaching a stable state wich is the workflow stack support basically for
  dynamique workflow chain delegation and validation of people in a
  collaborative and hierarchical scope.&lt;br /&gt;
   &lt;br /&gt;
   We started reaching the limits of the stateful engine at this point since
  we needed to hook application logic and objects on the workflow definition
  that may interact with other workflows or objects during the document life
  cycle. &lt;br /&gt;
   &lt;br /&gt;
   I'm of course talking about designing a generic reusable framework in here.
  It's always possible to reinvent the wheel and generate specific Python code
  on every customer projects. I know it's the point of view of some
  persons...(Feel free to use the traceback if you want to comment on this.)
  &lt;br /&gt;
   &lt;br /&gt;
   Zope3 has a pretty basic stateful workfow engine within the trunk. It's a
  pretty old implementation that lacks features for advanced workflows
  implementation. It's seems to be enough for pretty simple workflows
  though.&lt;br /&gt;
   &lt;br /&gt;
   Ulrich implemented a more Zope3'ish stateful workflow engine based on
  interface and adapters. I've been working on this too during the last Zope3
  sprint in Munich. I's been a good accasion for me to try stuffs on Z3, learn
  how the framework is working and if this interfaced based workflow approach
  is working. It actually does work and I think it could be possible to
  implement a DCWorkflow like workflow that would work well with Z3 this
  way.&lt;br /&gt;
   &lt;br /&gt;
   Jim recently checked in an interesting implementation of the wfmc
  specifications. This is an activity based model such as openflow from
  reflabs for Z2. (I've to say I don't know much about it since I've never had
  the occasion to implement customer specifications with it)&lt;br /&gt;
   This is not document centric at all. The document is simply the result of
  the process in this case.&lt;br /&gt;
   &lt;br /&gt;
   The advantages of this implementation are : &lt;br /&gt;
   &lt;br /&gt;
   

  &lt;ul&gt;
   &lt;li&gt;&amp;nbsp;&amp;nbsp; Standard implementation (wfmc specifications and xpdl (XML
   process definition language))&lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
   &lt;li&gt;&amp;nbsp; Activity based workflows are more suitable for business
   applications and complex processes modelizations.&lt;/li&gt;

   &lt;li&gt;Make the forward of CPSWorkflow stacks much more easily with this
   model.&lt;br /&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
  &lt;br /&gt;
   The disatvantages I can see so far are : &lt;br /&gt;
   &lt;br /&gt;
   &amp;nbsp;- It's not document centric and thus less convenient (and / or
  natural) in a content management scope. (especially coming from the dc wf
  world I agree)&lt;br /&gt;
   &amp;nbsp;- I don't like the idea of having a persistent activity instance.
  What needs to be persistent is the workflow relevant data and the state
  only.&lt;br /&gt;
   &lt;br /&gt;
   I could choose a pragmatic approach saying that it would be nice to have
  something that can work like DCWorkflow using the interface based workflow
  and thus being able to work with Zope3 much more sooner as the interfaced
  based model seems to work ;). But when I'm thinking about the stack
  workflows forward on Z3 framework I know that it's going to be much more
  convenient with the activity based workflow model. Or still the ability to
  design much more complex applications with lots more workflow processes
  involved. (I kind of like the idea as well :))&lt;br /&gt;
   &lt;br /&gt;
   I think both model do have interests but on the other hand it should be
  possible to design an application miming the stateful model with an activity
  based one.&lt;br /&gt;
   &lt;br /&gt;
   Thus I'm gonna jump into the activity based model by trying to implement a
  higher workflow component at the content management level using Jim's
  activity based workfow engine.&lt;br /&gt;
   &lt;br /&gt;
   [You may ask google for terms that are not explained such as &lt;a
  href="http://www.google.com/search?hl=en&amp;amp;q=xpdl&amp;amp;btnG=Google+Search"&gt;xpdl&lt;/a&gt;
  and &lt;a
  href="http://www.google.com/search?num=30&amp;amp;hl=en&amp;amp;lr=&amp;amp;safe=off&amp;amp;q=wfmc&amp;amp;btnG=Search"&gt;
  wfmc&lt;/a&gt;]&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
 </content>

  <id>tag:blogs.nuxeo.com:sections:blogs:julien_anguenot:2005_03_15_activity_based_workflows</id>
  <link rel="service.edit" type="application/atom+xml"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_03_15_activity_based_workflows/atom?2005_03_15_activity_based_workflows"
        title="Edit Here - Activity based workflows vs stateful workfows" />
</entry>

  
  
      <entry xmlns="http://purl.org/atom/ns#"
       xmlns:dc="http://purl.org/dc/elements/1.1/">
     
  <title mode="escaped" type="text/html">YAGNI</title>
  <link rel="alternate" type="text/html"
        href="http://blogs.nuxeo.com/sections/blogs/julien_anguenot/2005_02_22_yagni" />
  <issued>2005-03-08T01:20:36Z</issued>
  <modified>2005-03-08T01:20:36Z</modified>
  <created>2005-02-22T02:10:26Z</created>
  <draft xmlns="http://purl.org/atom-blog/ns#">false</draft>
  <author>
    <name>janguenot</name>
  </author>
  
  
    <dc:subject>coding</dc:subject>
  
  
  <summary type="text/html" mode="escaped">
  An interesting XP concept stating basically the following :
  
   
    "Always implement things when you actually
  need them, never when you just foresee that you need
  them."
  
   A good link about the topic.
   
   http://c2.com/cgi/wiki?YouArentGonnaNeedIt
   
 </summary>

  <content type="text/html" mode="escaped"
           xml:space="preserve">
  An interesting XP concept stating basically the following :
  &lt;br /&gt;
   &lt;br /&gt;
   &amp;nbsp;&lt;i&gt;"Always implement things when you &lt;b&gt;actually&lt;/b&gt;
  need them, never when you just &lt;span
  style="font-weight: bold;"&gt;f&lt;/span&gt;&lt;b&gt;oresee&lt;/b&gt; that you need
  them."&lt;br /&gt;
  &lt;br /&gt;
  &lt;/i&gt; A good link about the topic.&lt;br /&gt;
   &lt;br /&gt;
   &lt;a
  href="http://c2.com/cgi/wiki?YouArentGonnaNeedIt"&gt;http://c2.com/cgi/wiki?YouArentGonnaNeedIt&lt;/a&gt;&lt;br /&gt;
   &lt;br /&gt;
 </content>

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

  

</feed>
