<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
         xmlns="http://purl.org/rss/1.0/">




    



<channel rdf:about="http://rpatterson.net/software/aggregator/RSS">
  <title>Software</title>
  <link>http://rpatterson.net</link>
  
  <description>
    
       Software I've authored or contributed to
       
  </description> 

  
  
            <syn:updatePeriod>daily</syn:updatePeriod>
            <syn:updateFrequency>1</syn:updateFrequency>
            <syn:updateBase>2007-12-20T00:21:18Z</syn:updateBase>
        
  
  <image rdf:resource="http://rpatterson.net/logo.gif"/>

  <items>
    <rdf:Seq>
        
            <rdf:li rdf:resource="http://rpatterson.net/software/new-membrane-and-remember-maintainer"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/collective.securitycleanup"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/collective.catalogexport"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/collective.slideshowfolder"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/collective.redirect"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/collective.formcriteria"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/collective.testcaselayer"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/rpatterson.mailsync"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/z3c.persistentfactory"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/z3c.gibberish"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/z3c.recipe.ldap"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/zc.buildout"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/cmfplacefulworkflow"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/z3c.recipe.egg"/>
        
        
            <rdf:li rdf:resource="http://rpatterson.net/software/z3c.repoexternals"/>
        
    </rdf:Seq>
  </items>

</channel>

    <item rdf:about="http://rpatterson.net/software/new-membrane-and-remember-maintainer">        <title>New membrane and remember Maintainer - Rob Miller announced today that I'll be the new maintainer</title>        <link>http://rpatterson.net/software/new-membrane-and-remember-maintainer</link>        <description>&lt;p&gt;In a &lt;a class="reference" href="http://www.openplans.org/projects/remember/lists/remember/archive/2008/12/1228256501493/forum_view"&gt;post&lt;/a&gt;
to the remember list today, Rob Miller announced what we've been
discussing for a while, I'm now the new maintainer for &lt;a class="reference" href="http://plone.org/products/membrane"&gt;membrane&lt;/a&gt; and
&lt;a class="reference" href="http://plone.org/products/remember"&gt;remember&lt;/a&gt;.  I was stoked when he asked and since then we've had some
great discussions so I'm even more stoked now.  :)&lt;/p&gt;
&lt;p&gt;I've subsequently posted a &lt;a class="reference" href="http://www.openplans.org/projects/remember/lists/remember/archive/2008/12/1228267212368/forum_view"&gt;survey&lt;/a&gt;
in hopes of getting a sense of what people are using membrane and
remember for and what direction they'd like to see them take.  It
should only take a few seconds to respond to so please do if you have
any interest in membrane or remember at all.&lt;/p&gt;
&lt;p&gt;I'm looking forward to working with Rob and to help keep membrane and
remember moving forward!&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2008-12-03T02:00:54Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/collective.securitycleanup">        <title>collective.securitycleanup - GenericSetup handlers to restore Zope security to defaults</title>        <link>http://rpatterson.net/software/collective.securitycleanup</link>        <description>&lt;p&gt;WARNING: Backup your ZODB before using this package!&lt;/p&gt;
&lt;p&gt;The Zope 2 security framework is very powerful and one of it's
greatest strengths. A lot of it's power comes from it's
flexibility. Exposing that power to site adminsitrators often ends up
giving them enough rope to hang themselves with. This is exactly what
the &amp;quot;Security&amp;quot; tab in the ZMI does.&lt;/p&gt;
&lt;p&gt;In many cases, a site admin or consultant is faced with the daunting
task of restoring all the security settings throughout the Zope object
heirarchy in order to bring sanity and predictability back to the
site. The &lt;a class="reference" href="http://pypi.python.org/pypi/collective.securitycleanup"&gt;collective.securitycleanup&lt;/a&gt; package
provides GenericSetup handlers for restoring the role mappings and
local roles back to their defaults. This handler can be used in
combination with existing handlers to set role mappings and to
re-apply workflow security settings to help start the process of
security cleanup.&lt;/p&gt;
&lt;p&gt;The clean up is performed on all ancestors including the Zope
application root and by walking down the heirarchy to all
descendants. This means all descendents of the context the handler is
used on and all ancestors of the context including the root will be
cleaned up. It will not clean up siblings or anything else that is not
a direct ancestor to the context.&lt;/p&gt;
&lt;p&gt;The clean up removes all permission settings stored on the instance
which effectively restores them to code defaults. The clean up also
removes all local roles except the &amp;quot;Owner&amp;quot; role for the user returned
by OFS.interfasces.IOwned.getOwnerTuple() if already assigned.&lt;/p&gt;
&lt;p&gt;Use of this tool will likely only ever be a starting point. So be sure
to test thoroughly before deploying to your production server and
backup your ZODB before using it.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Planet Zope</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2008-12-01T18:25:30Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/collective.catalogexport">        <title>collective.catalogexport - Use ZCatalogs as export sources</title>        <link>http://rpatterson.net/software/collective.catalogexport</link>        <description>
&lt;p&gt;The data contained in tabular form in ZCatalogs is often exactly the
data site admins frequently want to export into some other format,
such as CSV.  This package provides views for exporting the catalog
data into various formats.&lt;/p&gt;
&lt;p&gt;Currently, only exporting the whole catalog with all
metadata/brains/columns as CSV is supported.  I plan to add support
for submiting arbitrary index queries and for controlling the
metadata/brains/columns exported.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2008-11-15T04:36:58Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/collective.slideshowfolder">        <title>collective.slideshowfolder - Somtimes useful extensions to Products.slideshowfolder</title>        <link>http://rpatterson.net/software/collective.slideshowfolder</link>        <description>
&lt;p&gt;The &lt;a class="external-link" href="http://pypi.python.org/pypi/collective.slideshowfolder"&gt;SlideshowImage content type&lt;/a&gt; uses a reference to an existing normal image somewhere else in the site to act as a kind of link or alias. This allows for the creation of a folder as a &lt;a class="external-link" href="http://pypi.python.org/pypi/Products.slideshowfolder"&gt;slideshowfolder&lt;/a&gt; that displays images that are actually stored elsewhere.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2008-11-13T06:27:28Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/collective.redirect">        <title>collective.redirect - Administer redirects to internal or external URLs using Link like content</title>        <link>http://rpatterson.net/software/collective.redirect</link>        <description>
&lt;p&gt;Administer redirects to internal or external URLs using Link like
content.  Where Products.redirectiontool or plone.app.redirector only
deal with redirecting to internal URLs internal to the portal,
&lt;a class="external-link" href="http://pypi.python.org/pypi/collective.redirect"&gt;collective.redirect&lt;/a&gt; allows for redirecting to external URLs.  The
paths to redirect are administered using instances of the Redirect
content type.  The paths that are redirected are independent of the
path of the Redirect instance for a couple of reasons.&lt;/p&gt;
&lt;p&gt;Firstly, since the portal object is not a BTree based folder it will
begin to behave poorly if too many objects are added to it.  Allowing
the redirected paths independent from the location of the Redirect
instances allows for many redirects without putting too many objects
in the portal root.&lt;/p&gt;
&lt;p&gt;Secondly, having the paths independent of the Redirect instance
locations allows users to create redirect for paths that they can't
add content too.  Keep in mind that this might be a bad thing for your
site and can certainly be abused as a DOS attack of sorts.&lt;/p&gt;
&lt;p&gt;If multiple redirects exist for the same path, the one with the more
recent publication date will be preferred.  Finally a redirect will
never override an otherwise traversable URL.  IOW, a redirect cannot
override an actual content object, skin object, view, or anything else
traversal.  The redirect only occurs when a NotFound error would
otherwise be raised.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2008-11-12T04:55:41Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/collective.formcriteria">        <title>collective.formcriteria - User enterable search criteria forms for collections/topic/smart folders.</title>        <link>http://rpatterson.net/software/collective.formcriteria</link>        <description>
&lt;p&gt;This package provides new criteria types based on the&lt;br /&gt;ATContentTypes.criteria types that are used to create a form at the&lt;br /&gt;top of the topic view.&amp;nbsp; Users can use the form to submit criteria to&lt;br /&gt;supplement any search criteria in the topic.&amp;nbsp; Values entered on the&lt;br /&gt;criteria tab for the topic become the default values on the form.&lt;br /&gt;&lt;br /&gt;Also provided is an alternative display layout that uses the folder&lt;br /&gt;contents table and can still display the search form viewlet.&lt;/p&gt;
&lt;p&gt;See the &lt;a class="external-link" href="http://pypi.python.org/pypi/collective.formcriteria"&gt;PyPI page&lt;/a&gt; for more details.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2008-05-24T20:49:18Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/collective.testcaselayer">        <title>collective.testcaselayer - Use test cases as zope.testing layers</title>        <link>http://rpatterson.net/software/collective.testcaselayer</link>        <description>
&lt;p&gt;The support for layers provided by zope.testing helps to lessen the amount of time consumed during test driven development by sharing expensive test fixtures, such as is often requires for functional test.&amp;nbsp; This package provides several well tested facilities to make writing and using layers faster and easier.&lt;/p&gt;
&lt;p&gt;Layer authors often end up reproducing the functionality provided by their test case classes since the same functionality is needed to perform layer set up or tear down.&amp;nbsp; The collective.testcaselayer.ztc, collective.testcaselayer.ctc, and collective.testcaselayer.ptc modules provide layer base classes that mix in the test case functionality from ZopeTestCase, CMFTestCase, and PloneTestCase, respectively.&amp;nbsp; See the collective.testcaselayer.ztc, and collective.testcaselayer.ptc sections below (or ztc.txt and ptc.txt if reading this in the source) for more details.&amp;nbsp; These layer base classes also include the layer base class support from collective.testcaselayer.layer and the sandboxed ZODB layer support from collective.testcaselayer.sandbox described below.&amp;nbsp; Additionally, these modules allow for using the test case fixtures as layers themselves.&lt;/p&gt;
&lt;p&gt;While class objects can be used as layers, as opposed to instances of classes, doing so means that it is not possible for a layer to subclass another layer *just* to re-use functionality without also depending on that layer being set up as well.&amp;nbsp; See the collective.testcaselayer.layer section below (or layer.txt if reading this in the source) for more details.&lt;/p&gt;
&lt;p&gt;The DemoStorage included with the ZODB provides a way to "nest" ZODB stores such that all writes will go to the DemoStorage while reads will be taken from the base storage if not available from the DemoStorage.&amp;nbsp; The collective.testcaselayer.sandbox module uses this feature to associate a DemoStorage with each sandboxed layer to which set up changes are committed and restore the base storage on tear down.&amp;nbsp; Thus sibling layers that write to the ZODB can be isolated from each other.&amp;nbsp; See the collective.testcaselayer.sandbox section below (or sandbox.txt if reading this in the source) for more details.&lt;/p&gt;
&lt;p&gt;See the &lt;a class="external-link" href="http://pypi.python.org/pypi/collective.testcaselayer"&gt;PyPI page&lt;/a&gt; for more details.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2008-05-24T06:19:53Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/rpatterson.mailsync">        <title>rpatterson.mailsync - OfflineIMAP, mswatch, and Gnus integration for realtime mail</title>        <link>http://rpatterson.net/software/rpatterson.mailsync</link>        <description>
&lt;p&gt;Like many others I've been frustrated with the options that are available for email clients.&amp;nbsp; I recently had a bit of break through and &lt;a class="external-link" href="http://pypi.python.org/pypi/rpatterson.mailsync"&gt;packaged&lt;/a&gt; the reusable parts of my mail setup for consumption by others.&amp;nbsp; See the &lt;a class="external-link" href="http://pypi.python.org/pypi/rpatterson.mailsync#backstory"&gt;backstory&lt;/a&gt; for all the gory details of the hisotry.&amp;nbsp; I've factored everything with an eye towards extensibility so if there's enough interest, I'll start a project and a public repo somewhere and put this out there.&amp;nbsp; See the &lt;a class="external-link" href="http://pypi.python.org/pypi/rpatterson.mailsync#todo"&gt;TODO&lt;/a&gt; list if your interested in any of the ideas I have for improvements.&lt;/p&gt;
&lt;p&gt;To try it out, just see the &lt;a class="external-link" href="http://pypi.python.org/pypi/rpatterson.mailsync"&gt;README&lt;/a&gt; on the pypi page.&amp;nbsp; Here's a brief description.&lt;/p&gt;
&lt;p&gt;This package provides some scripts that wrap parts of mswatch and&lt;br /&gt;OfflineIMAP and integrate with Gnus to provide a local maildir that&lt;br /&gt;is synchronized with a remote maildir as changes occur, instead of&lt;br /&gt;polling on a regular basis.&amp;nbsp; This provides for near instant delivery&lt;br /&gt;of new mail while also reducing resource utilization.&amp;nbsp; Integration&lt;br /&gt;with the Emacs mail and newsreader, Gnus, is also provided in such a&lt;br /&gt;way that your single threaded Emacs process is blocked much less as&lt;br /&gt;changes occur to the maildirs.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2008-05-01T08:17:30Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/z3c.persistentfactory">        <title>z3c.persistentfactory - Persistent instance method ZCA factories</title>        <link>http://rpatterson.net/software/z3c.persistentfactory</link>        <description>&lt;p&gt;Homepage: &lt;a class="external-link" href="http://pypi.python.org/pypi/z3c.persistentfactory"&gt;http://pypi.python.org/pypi/z3c.persistentfactory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The ZCA and the ZODB are a good combination where components require
persistent state.  ZCA factories or handlers typically retrieve any
persistent state required from the persistent objects being adapted.
If the persistent state required is not specific to the objects being
adapted, a common solution is to register a persistent utility which
is then looked up in the factory or handler.  The persistent utility
approach requires, however, that the one appropriate utility is looked
up which requires support in the ZCA registrations either in the
interface provided or the utility name.&lt;/p&gt;
&lt;p&gt;In some cases, however, it is more consistent with the object oriented
semantics of Python and the ZCA to think of the factory or handler as
an instance method of a persistent object.  With this approach the
non-context specific persistent state can be accessed on self.&lt;/p&gt;
&lt;div class="section"&gt;
&lt;h2&gt;&lt;a id="instance-method-event-handler" name="instance-method-event-handler"&gt;Instance Method Event Handler&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One example where this may be useful is where some non-context
persistent state is tightly coupled to some event handlers in such a
way where instance methods are better semantics.&lt;/p&gt;
&lt;p&gt;The Baz class uses the decorator in the python code.  Note that the
factory decorator must come before the declaration decorators so that
it will be run last and will reflect the declarations.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="doctest-block"&gt;&amp;gt;&amp;gt;&amp;gt; from z3c.persistentfactory import testing&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; baz = testing.Baz()&lt;br /&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Register the persistent factory wrapped instance method as a handler.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="doctest-block"&gt;&amp;gt;&amp;gt;&amp;gt; from zope import component&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; component.provideHandler(factory=baz.factory)&lt;br /&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;The method adapts IFoo, so create an object providing IFoo to be used
as the event.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="doctest-block"&gt;&amp;gt;&amp;gt;&amp;gt; component.adaptedBy(baz.factory)&lt;br /&gt;(&amp;lt;InterfaceClass z3c.persistentfactory.testing.IFoo&amp;gt;,)&lt;br /&gt;&lt;/pre&gt;
&lt;pre class="doctest-block"&gt;&amp;gt;&amp;gt;&amp;gt; from zope import interface&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; foo = testing.Foo()&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; interface.alsoProvides(foo, testing.IFoo)&lt;br /&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;When the event is notified, the method is called with the event as an
argument.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="doctest-block"&gt;&amp;gt;&amp;gt;&amp;gt; import zope.event&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; zope.event.notify(foo)&lt;br /&gt;Called &amp;lt;bound method Baz.factory of&lt;br /&gt;&amp;lt;z3c.persistentfactory.testing.Baz object at ...&amp;gt;&amp;gt;&lt;br /&gt;  args: (&amp;lt;z3c.persistentfactory.testing.Foo object at ...&amp;gt;,)&lt;br /&gt;  kwargs: {}&lt;br /&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="section"&gt;
&lt;h2&gt;&lt;a id="instance-method-adapter-factory" name="instance-method-adapter-factory"&gt;Instance Method Adapter Factory&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Another example is where an adapter factory needs to look up
persistent state specific to the objects being adapted but where that
state can't be stored on the adapted objects them selves.  The
component storing the shared persistent state can register one of it's
instance methods as the adapter factory which will look up the
necessary persistent state on self.&lt;/p&gt;
&lt;p&gt;Register the persistent factory wrapped instance method as an adapter
factory.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="doctest-block"&gt;&amp;gt;&amp;gt;&amp;gt; component.provideAdapter(factory=baz.factory)&lt;br /&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;The method implements IBar.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="doctest-block"&gt;&amp;gt;&amp;gt;&amp;gt; tuple(interface.implementedBy(baz.factory))&lt;br /&gt;(&amp;lt;InterfaceClass z3c.persistentfactory.testing.IBar&amp;gt;,)&lt;br /&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;When the adapter is looked up, the metod is called with the object to
be adapted as an argument.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="doctest-block"&gt;&amp;gt;&amp;gt;&amp;gt; result = component.getAdapter(foo, testing.IBar)&lt;br /&gt;Called &amp;lt;bound method Baz.factory of&lt;br /&gt;&amp;lt;z3c.persistentfactory.testing.Baz object at ...&amp;gt;&amp;gt;&lt;br /&gt;  args: (&amp;lt;z3c.persistentfactory.testing.Foo object at ...&amp;gt;,)&lt;br /&gt;  kwargs: {}&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; result&lt;br /&gt;(&amp;lt;bound method Baz.factory of&lt;br /&gt; &amp;lt;z3c.persistentfactory.testing.Baz object at ...&amp;gt;&amp;gt;,&lt;br /&gt; (&amp;lt;z3c.persistentfactory.testing.Foo object at ...&amp;gt;,), {})&lt;br /&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="section"&gt;
&lt;h2&gt;&lt;a id="changelog" name="changelog"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Planet Zope</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2008-04-09T06:43:26Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/z3c.gibberish">        <title>z3c.gibberish - CSV files of random dictionary words</title>        <link>http://rpatterson.net/software/z3c.gibberish</link>        <description>&lt;p&gt;I needed to generate random verbiage that still reflected indexing performance somewhat realistically for a &lt;a title="JMeter" class="internal-link" href="/skills/jmeter"&gt;JMeter&lt;/a&gt; test plan I built for a &lt;a title="Undisclosed Startup" class="internal-link" href="/projects/undisclosed-startup"&gt;project&lt;/a&gt; with &lt;a title="Jazkarta" class="internal-link" href="/colleagues/jazkarta"&gt;Jazkarta&lt;/a&gt;.&amp;nbsp; As such, I wanted something other than random strings, I wanted real words but random selection. I wrote &lt;a class="external-link" href="http://cheeseshop.python.org/pypi/z3c.gibberish/"&gt;z3c.gibberish&lt;/a&gt; to do this.&lt;/p&gt;
&lt;p&gt;There are a couple improvements I'd like to make to z3c.gibberish given interest and time:&lt;/p&gt;
&lt;h3&gt;Weighted Word Frequency&lt;/h3&gt;
&lt;p&gt;I'd like to improve z3c.gibberish to use a weighted random selection so that more common words are selected more often.&lt;/p&gt;
&lt;p&gt;On further thought, it would probably be best to support this by using a dictionary that repeats words to represent frequency.&amp;nbsp; Maybe z3c.gibberish could be extended to take a normal dictionary and a file representing weights and output a weighted dictionary to be used for subsequent runs of z3c.gibberish.&lt;/p&gt;
&lt;h3&gt;Optimized Row Handling&lt;br /&gt;&lt;/h3&gt;
&lt;p&gt;I could also make it more efficient by pre-assembling a list of dictionary indexes for each row and then assembling the row by retrieving the words corresponding to the index in order to avoid repeatedly iterating through the dictionary for each row/cell.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Planet Zope</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2007-12-21T00:46:34Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/z3c.recipe.ldap">        <title>z3c.recipe.ldap - deploy an OpenLDAP server</title>        <link>http://rpatterson.net/software/z3c.recipe.ldap</link>        <description>&lt;p&gt;&lt;a class="external-link" href="http://svn.zope.org/z3c.recipe.ldap/trunk/"&gt;z3c.recipe.ldap&lt;/a&gt; is a &lt;a title="zc.buildout" class="internal-link" href="/software/zc.buildout"&gt;zc.buildout&lt;/a&gt; recipe I wrote for &lt;a title="Jazkarta" class="internal-link" href="/colleagues/jazkarta"&gt;Jazkarta&lt;/a&gt; while working on an &lt;a title="Undisclosed Startup" class="internal-link" href="/projects/undisclosed-startup"&gt;internet startup project&lt;/a&gt;.&amp;nbsp; It can be used to deploy an OpenLDAP server.  More specifically it provides for initializing an LDAP
database from an LDIF file and for setting up an LDAP instance in the
buildout.  This recipe can also be used to provide an isolated LDAP
instance as a test fixture.&lt;a id="how-to-use-z3c-recipe-ldap" class="toc-backref" name="how-to-use-z3c-recipe-ldap" href="http://api.rst2a.com/1.0/rst2/html?uri=http%3A%2F%2Fsvn.zope.org%2F*checkout*%2Fz3c.recipe.ldap%2Ftrunk%2Fz3c%2Frecipe%2Fldap%2Fdocs%2FREADME.txt&amp;amp;style=zope#id4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I'd like to complete &lt;a title="z3c.recipe.subprocess" class="internal-link" href="/blog/z3c.recipe.subprocess"&gt;z3c.recipe.subprocess&lt;/a&gt; and port this package to that.&amp;nbsp; It does, however, work just fine now.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Planet Zope</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2007-12-21T00:47:13Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/zc.buildout">        <title>zc.buildout - Contributed fixes</title>        <link>http://rpatterson.net/software/zc.buildout</link>        <description>
&lt;p&gt;I've contributed &lt;a class="external-link" href="https://bugs.launchpad.net/zc.buildout/+bug/151820"&gt;fixes&lt;/a&gt; to &lt;a class="external-link" href="http://cheeseshop.python.org/pypi/zc.buildout"&gt;zc.buildout&lt;/a&gt;.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Software</dc:subject>                <dc:date>2007-12-21T09:21:38Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/cmfplacefulworkflow">        <title>Products.CMFPlacefulWorkflow - GenericSetup export and import handlers</title>        <link>http://rpatterson.net/software/cmfplacefulworkflow</link>        <description>
&lt;p&gt;I contributed &lt;a class="external-link" href="http://plone.org/products/cmfplacefulworkflow"&gt;CMFPlacefulWorkflow&lt;/a&gt; &lt;a class="external-link" href="http://dev.plone.org/collective/changeset/52456"&gt;export and import handlers&lt;/a&gt; for the &lt;a title="Humanities Research Network" class="internal-link" href="/projects/humanities-research-network"&gt;HRN&lt;/a&gt; project with &lt;a title="Jazkarta" class="internal-link" href="/colleagues/jazkarta"&gt;Jazkarta&lt;/a&gt;.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Software</dc:subject>                <dc:date>2007-12-21T00:11:28Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/z3c.recipe.egg">        <title>z3c.recipe.egg - working with source distributions</title>        <link>http://rpatterson.net/software/z3c.recipe.egg</link>        <description>&lt;p&gt;&lt;a class="external-link" href="http://cheeseshop.python.org/pypi/z3c.recipe.egg"&gt;z3c.recipe.egg&lt;/a&gt; provides recipes based on zc.recipe.egg for working with source
distributions.&lt;/p&gt;
&lt;div id="editable-distributions" class="section"&gt;
&lt;h1&gt;Editable Distributions&lt;/h1&gt;
&lt;p&gt;The z3c.recipe.egg:editable recipe uses the easy_install --editable
and --build-directory options to download multiple source
distributions.&lt;/p&gt;
&lt;p&gt;The source distributions will be placed in the part directory and
managed by the buildout if build-directory is not specified.  If so,
the distributions will be replaced when newer versions are available.
So be sure to set build-directory to a directory not managed by
buildout if you want to maintain changes to the source distributions.&lt;/p&gt;
&lt;p&gt;The z3c.recipe.egg:editable can be used to assemble a set of
subversion checkouts to work with specifying subversion URLs in
find-links as is supported by easy_install.  See the easy_install
documentation for the syntax for using subversion URLs.  There are a
number of ways in which it is more flexible to control checkouts via
recipes rather than svn:externals.&lt;/p&gt;
&lt;p&gt;Finally, if the develop option is true then the distributions will be
installed in develop mode.&lt;/p&gt;
&lt;p&gt;See z3c/recipe/egg/editable.txt for more details.&lt;/p&gt;
&lt;/div&gt;
&lt;div id="running-setup-scripts" class="section"&gt;
&lt;h1&gt;Running Setup Scripts&lt;/h1&gt;
&lt;p&gt;The z3c.recipe.egg:setup recipe calls arbitrary setup.py commands on
multiple distributions in a buildout.&lt;/p&gt;
&lt;p&gt;The z3c.recipe.egg:setup recipe can be used, for example, to automate
releases.  When the source is ready for release, the setup recipe is
configured to run the "register sdist bdist_egg upload" setup
commands.  To ensure release only runs when intended, the setup recipe
can be used in it's own release.cfg file that extends
the buildout.cfg file.  With this setup, releases for multiple
projects can be made with "bin/buildout -c release.cfg".&lt;/p&gt;
&lt;p&gt;The z3c.recipe.egg:setup recipe also supports the develop option as
with z3c.recipe.egg:editable.&lt;/p&gt;
&lt;p&gt;See z3c/recipe/egg/setup.txt for more details.&lt;/p&gt;
&lt;/div&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Front Page</dc:subject>                    <dc:subject>Planet Plone</dc:subject>                    <dc:subject>Planet Zope</dc:subject>                    <dc:subject>Software</dc:subject>                <dc:date>2007-12-21T00:47:03Z</dc:date>        <dc:type>News Item</dc:type>    </item>
    <item rdf:about="http://rpatterson.net/software/z3c.repoexternals">        <title>z3c.repoexternals - Generate svn:externals from trunks in a repository</title>        <link>http://rpatterson.net/software/z3c.repoexternals</link>        <description>
&lt;p&gt;&lt;a class="external-link" href="http://cheeseshop.python.org/pypi/z3c.repoexternals"&gt;z3c.repoexternals&lt;/a&gt; recursively retrieves subversion directory listings from the url or path and matches directories against a previous set of svn:externals&lt;br /&gt;if provided then against regular expressions and generates&lt;br /&gt;qualifying svn:externals lines.  The defaults generate a set of&lt;br /&gt;svn:externals for all the trunks in a repository and keeps them up&lt;br /&gt;to date with the repository as new trunks are added when the&lt;br /&gt;previous externals are provided thereafter.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>ross</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Software</dc:subject>                <dc:date>2007-12-21T00:47:30Z</dc:date>        <dc:type>News Item</dc:type>    </item>




</rdf:RDF>
