<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://www.rpatterson.net/</id>
  <title>Ross Patterson's Blog - Posted in 2010</title>
  <updated>2025-07-14T00:00:48.254131+00:00</updated>
  <link href="https://www.rpatterson.net/"/>
  <link href="https://www.rpatterson.net/blog/2010/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.12">ABlog</generator>
  <entry>
    <id>https://www.rpatterson.net/blog/migrating-a-blobstorage/</id>
    <title>Migrating a blobstorage</title>
    <updated>2010-12-01T00:00:00+00:00</updated>
    <author>
      <name>Ross Patterson</name>
    </author>
    <content type="html">&lt;section id="migrating-a-blobstorage"&gt;

&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;Addressing the “ZODB.blob WARNING (PID) The &lt;cite&gt;lawn&lt;/cite&gt; blob directory layout is deprecated due to scalability issues on some file systems, please consider migrating to the &lt;cite&gt;bushy&lt;/cite&gt; layout.” warnings.&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;Update: Filed a ZODB &lt;a class="reference external" href="https://bugs.launchpad.net/zodb/+bug/683874"&gt;bug&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’ve been getting he following log message ever since I migrated to ZODB BLOBs:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ZODB.blob WARNING (PID) The `lawn` blob directory layout is deprecated due to scalability issues on some file systems, please consider migrating to the `bushy` layout.
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;It’s not obvious what to do about this, even after initial googling, so I thought I’d document it.  Firstly, we need to use the ZODB.scripts.migrateblobs script so create a console script for it that has all the necessary eggs available.  Unfortunately, the ZODB3 egg doesn’t define a console_scripts entry point for this script so I used zc.recipe.egg to work around this:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;buildout&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt;
    &lt;span class="n"&gt;zeo&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
    &lt;span class="n"&gt;migrateblobs&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;migrateblobs&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;zc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;egg&lt;/span&gt;
&lt;span class="n"&gt;eggs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ZODB3&lt;/span&gt;
&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;migrateblobs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ZODB&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scripts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;migrateblobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After re-running buildout and shutting down ZEO, I used the generated
script to migrate the blobstorage:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ mv var/blobstorage var/blobstorage-lawn
$ bin/migrateblobs var/blobstorage-lawn/ var/blobstorage
(PID) Blob directory `var/blobstorage-lawn/` has layout marker set. Selected `lawn` layout.
(PID) The `lawn` blob directory layout is deprecated due to scalability issues on some file systems, please consider migrating to the `bushy` layout.
(PID) Blob directory &amp;#39;.../var/blobstorage/&amp;#39; does not exist. Created new directory.
(PID) Blob temporary directory &amp;#39;var/blobstorage/tmp&amp;#39; does not exist. Created new directory.
Migrating blob data from `var/blobstorage-lawn/` (lawn) to `var/blobstorage` (bushy)
        OID: 0x###### - 1 files
...
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Now I’m able to fire up ZEO and I can access AT file and image objects
fine without the log warning.&lt;/p&gt;
&lt;div class="note update admonition"&gt;
&lt;p class="admonition-title"&gt;Updated on 01 December 2010&lt;/p&gt;
&lt;p&gt;Imported from Plone on Mar 15, 2021.  The date for this update is the last
modified date in Plone.&lt;/p&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://www.rpatterson.net/blog/migrating-a-blobstorage/"/>
    <summary>Addressing the “ZODB.blob WARNING (PID) The lawn blob directory layout is deprecated due to scalability issues on some file systems, please consider migrating to the bushy layout.” warnings.</summary>
    <category term="Plone" label="Plone"/>
    <category term="Zope" label="Zope"/>
    <published>2010-12-01T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://www.rpatterson.net/blog/trying-out-chameleon/</id>
    <title>Trying out Chameleon</title>
    <updated>2010-10-07T00:00:00+00:00</updated>
    <author>
      <name>Ross Patterson</name>
    </author>
    <content type="html">&lt;section id="trying-out-chameleon"&gt;

&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;My experiences with Chameleon, testing compatibility and z3c.form&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;I’m about to upgrade a sizable client deployment to Plone 4 and wanted to see if I could switch to the &lt;a class="reference external" href="http://chameleon.repoze.org/"&gt;Chameleon&lt;/a&gt; template engine at the same time.  I’m recording things I found here:&lt;/p&gt;
&lt;section id="testing-both-with-and-without-chameleon"&gt;
&lt;h2&gt;Testing both with and without Chameleon&lt;/h2&gt;
&lt;p&gt;For some add-ons of mine, I found it useful to be able to run the tests both with and without Chameleon.  It turns out to be &lt;a class="reference external" href="https://dev.plone.org/collective/changeset/145722/"&gt;remarkably simple&lt;/a&gt; with buildout.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="integrating-cmf-pt-and-z3c-form"&gt;
&lt;h2&gt;Integrating cmf.pt and z3c.form&lt;/h2&gt;
&lt;p&gt;There are some gotchas when using both cmf.pt and z3c.form together.  You have to be sure to include z3c.ptcompat, which you can do with z3c.form’s poorly named “extra” extras_require.  I did this in my project’s setup.py by adding the following:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;      &lt;span class="n"&gt;install_requires&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
          &lt;span class="s1"&gt;&amp;#39;z3c.form[extra]&amp;lt;2.3dev&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Unfortunately, z3c.ptcompat uses an environment variable to switch on the use of Chameleon so you have to add the environment variable to the buildout instances and test runners:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;vars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="n"&gt;PREFER_Z3C_PT&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;testenv&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;testenv&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;PREFER_Z3C_PT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="note update admonition"&gt;
&lt;p class="admonition-title"&gt;Updated on 07 October 2010&lt;/p&gt;
&lt;p&gt;Imported from Plone on Mar 15, 2021.  The date for this update is the last
modified date in Plone.&lt;/p&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://www.rpatterson.net/blog/trying-out-chameleon/"/>
    <summary>My experiences with Chameleon, testing compatibility and z3c.form</summary>
    <category term="Plone" label="Plone"/>
    <category term="Zope" label="Zope"/>
    <published>2010-10-07T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://www.rpatterson.net/blog/does-the-tool-really-deserve-the-credit/</id>
    <title>Does the Tool Really Deserve the Credit?</title>
    <updated>2010-08-16T00:00:00+00:00</updated>
    <author>
      <name>Ross Patterson</name>
    </author>
    <content type="html">&lt;section id="does-the-tool-really-deserve-the-credit"&gt;

&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;When we rave about a tool being superior because we used it to solve a given problem, is it really the tool or the familiarity with the problem we gained in learning to use the tool?&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;To get it out of the way, this is not about &lt;a class="reference external" href="http://pypi.python.org/pypi/virtualenv"&gt;virtualenv&lt;/a&gt; or &lt;a class="reference external" href="http://pypi.python.org/pypi/z3c.form"&gt;z3c.form&lt;/a&gt;.  I have nothing but praise
for virtualenv, I just use it very rarely.  I have much to criticize
about z3c.form, but that’s another topic and may be a problem &lt;a class="reference external" href="http://blog.ianbicking.org/on-form-libraries.html"&gt;endemic
to all forms libraries&lt;/a&gt;.  I’d like to
keep this and any ensuing discussion to the more abstract issue of
incidental familiarity and how it affects our perspectives on the
value of a given tool.&lt;/p&gt;
&lt;p&gt;I use &lt;a class="reference external" href="http://www.ubuntu.com/"&gt;Ubuntu Linux&lt;/a&gt; for my development
platform (and everything else).  As such, I’ve had the luxury of a
pretty good OS installed python development environment.  I really
don’t know much about virtualenv.  I do know its one of those tools
that many people swear by with a bit of zeal.  Some won’t assist with
a problem unless you first setup a virtualenv to eliminate variables.
The thing is, it’s never actually solved a problem of mine that I can
think of by eliminating a variable.  I have on a very few occasions
found it useful to smash my way out of a horrible environment when I’m
not under one of my trusty Ubuntu environments, but even then just to
get up and running.  So for me, it’s a tool I don’t know well that I
will use only when I need to to meet someone else’s requirements or to
solve a problem quickly when finding the root cause isn’t worth my
time.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://plone.org/"&gt;Plone 3&lt;/a&gt;, unfortunately (go &lt;a class="reference external" href="http://plone.org/products/plone/releases/4.0"&gt;Plone 4&lt;/a&gt;, GO!), still requires
Python 2.4 and Ubuntu has, quite appropriately, recently dropped 2.4.
While struggling to keep my Plone 3 buildouts running and with some
RHEL deployments, I found myself reaching for virtualenv.  The
problems were a mess of path issues (PATH, PYTHONPATH,
LD_LIBRARY_PATH, etc.).  I don’t know much about these issues and I
don’t want to.  I prefer to delegate to my trusty OS and to buildout.
In the end, though virtualenv helped somewhat, I still had to come to
understand far more about that path issues than I feel I should.&lt;/p&gt;
&lt;p&gt;It occurred to me, however, that if I’d been working on something
other than Ubuntu all these years, I would have run into many more
path and similar problems and I probably would have fallen in love
with virtualenv.  It also occurred to me, that in the process of
learning to use virtualenv to help resolve these issues, I would
probably have learned a lot more about all the path issues and would
probably be fairly competent at comprehending such issues.  I would
probably also not be aware that I had gained such further familiarity
and might attribute my new-found greater ease with my Python
environments disproportionately to virtualenv.&lt;/p&gt;
&lt;p&gt;This reminded me of my experience with &lt;a class="reference external" href="http://pypi.python.org/pypi/zope.formlib"&gt;zope.formlib&lt;/a&gt; and z3c.form.  A while
back I’d built a number of forms with zope.formlib/zope.app.form.  I
found it initially much more productive than &lt;a class="reference external" href="http://plone.org/products/archetypes"&gt;Archetypes&lt;/a&gt;, mostly due to much more
appropriate decoupling, but as time went on it seemed likely I would
have to put at least as much time into understanding things I don’t
want to as I have had to do with Archetypes.  Given I already have the
requisite familiarity with Archetypes and can be quite productive in
it, I limited my investment in zope.formlib.  When z3c.form came
around, I was very excited at the prospect that I might get much of
the benefit of zope.fomrlib forms without having to know as many
things I don’t want to know.  I’m now considerably more invested in
z3c.form than I ever was in zope.formlib and I can safely say I need
to know just about as much I don’t feel I should have to as I did with
zope.formlib.&lt;/p&gt;
&lt;p&gt;I have noted that the advocates of z3c.form often seem to find the
appropriate approach to a given problem to be very clear to them and
take a lot of pride in being able to point to the right place in the
docs.  For my experience, however, I find that even after reading the
right place in the docs and reviewing several other docs, I still have
to do way too much UTSL to solve my problem.  I also have the strong
sense that after putting this much time into learning z3c.form, the
obviousness of “The Right Way” will only come to me once I’ve had to
learn nearly as much I shouldn’t have to as I’ve had to do with
Archetypes.  I take from this that it may be another case of somewhat
erroneously attributing the value of comprehension, understanding, and
experience to the tool whose use lead to this familiarity largely
incidentally.&lt;/p&gt;
&lt;p&gt;(To be very clear, I don’t want to discuss z3c.form here.  I think
investing in some successor to AT is very necessary at this point and
we may not be able to afford waiting for something else.  The
documentation is also absolutely worth being proud of.  I think most
of the value of z3c.form will be in putting our collective weight
behind &lt;em&gt;something&lt;/em&gt;.  I use z3c.form and will continue to do so.)&lt;/p&gt;
&lt;p&gt;Now for the disturbing part, I know I’ve done this very thing &lt;em&gt;many&lt;/em&gt;
times but I can’t yet list them.  It’s much easier to come to see a
pattern like this when looking critically at or feeling frustrated
with tools I’m just using but not heavily invested in than it is to do
so with tools I’m building.  I hope to temper my strategic decisions
for adopting and suggesting tools with this critical awareness.  I
also hope to temper my own perspective of the value of tools I’m
developing or becoming deeply invested in.  I also hope our
development community can learn to better ask whether the perceived
value of a given tool is being unduly influenced by the incidental
familiarity we’ve developed in building or using that tool.&lt;/p&gt;
&lt;div class="note update admonition"&gt;
&lt;p class="admonition-title"&gt;Updated on 16 August 2010&lt;/p&gt;
&lt;p&gt;Imported from Plone on Mar 15, 2021.  The date for this update is the last
modified date in Plone.&lt;/p&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://www.rpatterson.net/blog/does-the-tool-really-deserve-the-credit/"/>
    <summary>When we rave about a tool being superior because we used it to solve a given problem, is it really the tool or the familiarity with the problem we gained in learning to use the tool?</summary>
    <category term="Plone" label="Plone"/>
    <category term="Zope" label="Zope"/>
    <published>2010-08-16T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://www.rpatterson.net/blog/extensionclass_update/</id>
    <title>ExtensionClass ZODB Migration Script</title>
    <updated>2010-04-02T00:00:00+00:00</updated>
    <author>
      <name>Ross Patterson</name>
    </author>
    <content type="html">&lt;section id="extensionclass-zodb-migration-script"&gt;

&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;&lt;a class="reference download internal" download="" href="../../_downloads/5a913172554c7d192bcdad4f1c68391f/extensionclass_update.py"&gt;&lt;code class="xref download docutils literal notranslate"&gt;&lt;span class="pre"&gt;A&lt;/span&gt; &lt;span class="pre"&gt;&amp;quot;bin/instance&lt;/span&gt; &lt;span class="pre"&gt;run&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;script&lt;/span&gt;&lt;/code&gt;&lt;/a&gt; for updating
ExtensionClass instances pickles in the ZODB.  Useful to apply Hanno’s pickle patch.&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;div class="note update admonition"&gt;
&lt;p class="admonition-title"&gt;Updated on 02 April 2010&lt;/p&gt;
&lt;p&gt;Imported from Plone on Mar 15, 2021.  The date for this update is the last
modified date in Plone.&lt;/p&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://www.rpatterson.net/blog/extensionclass_update/"/>
    <summary>A "bin/instance run" script for updating
ExtensionClass instances pickles in the ZODB.  Useful to apply Hanno’s pickle patch.</summary>
    <published>2010-04-02T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://www.rpatterson.net/blog/dogfood-dinner-bell/</id>
    <title>Dogfood Dinner Bell</title>
    <updated>2010-04-01T00:00:00+00:00</updated>
    <author>
      <name>Ross Patterson</name>
    </author>
    <content type="html">&lt;section id="dogfood-dinner-bell"&gt;

&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;It’s that time again to upgrade my Blog to the latest Plone.&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;With the first Plone 4 Beta out it’s time to eat my own dogfood and
upgrade my blog.  This site is now running on Plone 4.0b1-1.  So come
poke around if you like and tell me what’s broken.  :)&lt;/p&gt;
&lt;p&gt;The upgrade went pretty smoothly for my main site.  I had some other,
older, Plone portals where I’ve installed various add-ons in the past
and for those I had to do some manual cleanup of some broken objects.&lt;/p&gt;
&lt;p&gt;The unified folder implementation makes removing broken objects very
difficult.  The manage_delObjects(), _delObject, and _delOb methods
are all broken before the folders have been migrated but the migration
won’t complete if there are broken objects in the folder.  I had to do
something like this where “idx” is the index in _objects of the broken
object and ‘foo’ is the id:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_objects&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_objects&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_objects&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="nb"&gt;delattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;foo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;transaction&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;On two of my portals I also had some regular TextIndex’es in the
catalog, which I guess are no longer around.  Those I was able to just
delete in the “Indexes” tab of the ZMI for portal_catalog.   Since
these were core indexes like “Title” I used portal_setup to install
just the catalog import step from the Plone base profile.  Being a
base profile this means running the import step cleared the
indexes so I also had to update those catalogs.&lt;/p&gt;
&lt;p&gt;After all that was done I just uninstalled the classic theme and Kupu
and then installed and configured &lt;a class="reference external" href="http://bluedynamics.com/articles/jens/plone-4-and-caching"&gt;plone.app.caching&lt;/a&gt;.
Everything seems to be working well.&lt;/p&gt;
&lt;p&gt;Just to polish things off, I wanted to make sure I was getting the
full benefit of &lt;a class="reference external" href="http://n2.nabble.com/ExtensionClass-Base-vs-ZODB-td4617874.html"&gt;Hanno’s ExtensionClass/ZODB fix&lt;/a&gt;.
The one thing I can’t find is a clear migration procedure.  As far as
I understand the ZODB, the objects created before the fix would need
to be written to the ZODB again to see the benefit from the fix.  So I
used the following at a “bin/instance debug” prompt:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ZopeFindAndApply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;search_sub&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;apply_func&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;setattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;_p_changed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;transaction&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That &lt;em&gt;should&lt;/em&gt; do it, but if anyone knows how that’s insufficient or
knows a better way to accomplish the migration, please do leave a comment.&lt;/p&gt;
&lt;div class="note update admonition"&gt;
&lt;p class="admonition-title"&gt;Updated on 01 April 2010&lt;/p&gt;
&lt;p&gt;Imported from Plone on Mar 15, 2021.  The date for this update is the last
modified date in Plone.&lt;/p&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://www.rpatterson.net/blog/dogfood-dinner-bell/"/>
    <summary>It’s that time again to upgrade my Blog to the latest Plone.</summary>
    <category term="Plone" label="Plone"/>
    <published>2010-04-01T00:00:00+00:00</published>
  </entry>
</feed>
